天天看點

RAISE_APPLICATION_ERROR

可能不是很多人知道 RAISE_APPLICATION_ERROR 的用途是什麼,雖然從字面上已經猜到這個函數是幹什麼用的。 其實 RAISE_APPLICATION_ERROR 是将應用程式專有的錯誤從伺服器端轉達到用戶端應用程式。 RAISE_APPLICATION_ERROR 的聲明: PROCEDURE RAISE_APPLICATION_ERROR ( error_number_in IN NUMBER, error_msg_in IN VARCHAR2); 裡面的錯誤代碼和内容,都是自定義的。說明是自定義,當然就不是系統中已經命名存在的錯誤類别,是屬于一種自定義事務錯誤類型,才調用此函數。 error_number_in 之容許從 -20000 到 -20999 之間,這樣就不會與 ORACLE 的任何錯誤代碼發生沖突。 error_msg_in 的長度不能超過 2K,否則截取 2K。 舉個例吧: 阻止小于18歲的使用者增加到資料庫 employee 表中 CREATE OR REPALCE TRIGGER minimun_age_check BEFORE INSERT ON employee FOR EACH ROW BEGIN IF ADD_MONTHS( :new.birth_date, 18*12) > SYSDATE THEN RAISE_APPLICATION_ERROR(-20001, 'Employees must at least eighteen years of age.'); END IF; END; 在用戶端,你可以寫一個類似下面的程式,來測試一下。 DECLARE no_babies_allowed EXCEPTION; PRAGMA EXCEPTION_INIT(no_babies_allowed, -20001); BEGIN INSERT INTO employee ....; EXCEPTION WHEN no_babies_allowed THEN DBMS_OUTPUT.PUT_LINE(SQLERRM); END; PRAGMA 關鍵字用以同志編譯程式:PL/SQL 語句的剩餘部分是一個編譯訓示(pragma)或指令。編譯訓示在編譯時被處理,它們不在運作時執行。 編譯訓示是對編譯程式發出的特殊指令。它也稱為僞指令(pseudoinstruction),不會改變程式的含義。它隻是向編譯程式傳遞資訊 ,實際上它是非常類似于嵌在 SQL 語句的注釋中的性能調整提示。 下面舉例一寫 PL/SQL 提供的編譯訓示: EXCEPTION_INIT 将一個特定的錯誤号與程式中所聲明的異常标示符關聯起來。 RESTRICT_REFERENCES 告訴編譯程式打包程式的純度。 SERIALLY_REUSABLE 告訴PL/SQL 的運作時引擎,在資料引用之時不要保持包級資料。 PEAGMA 的使用文法: PEAGMA

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/77580/viewspace-212754/,如需轉載,請注明出處,否則将追究法律責任。

轉載于:http://blog.itpub.net/77580/viewspace-212754/