plsql之pragma exception_init
---建立
create or replace procedure proc_exception_init
as
my_test_exception exception;
--pragma為編譯器指令 exception_init有2個引數,各為異常名稱和oracle錯誤號碼,即把oracle錯誤號碼和異常名稱聯絡起來
--這樣就可以根據異常名稱在exception模組編寫異常處理功能程式碼了
pragma exception_init(my_test_exception,-36100);
v_a pls_integer;
begin
v_a:=1;
if v_a=2 then
dbms_output.put_line(v_a);
exception
when my_test_exception then --可以直接在exception when引用上述宣告定義的my_test_exception異常,而此異常對應一個oracle錯誤程式碼即ora-xxxxx
dbms_output.put_line('me defined exception');
end;
---exception_init第二引數的取值範圍如下:
error_code
--oracle錯誤碼可以是100或者> -10000000(但排除-1403)的任何錯誤程式碼
Error code to be associated with exception. error_code can be either 100
(the numeric code for "no data found" that "SQLCODE Function" returns) or any negative integer greater
than -10000000 except -1403 (another numeric code for "no data found").
------------下述測試oracle錯誤碼的取值範圍
---如果錯誤碼不在上述的指定範圍內,則報錯
SQL> create or replace procedure proc_uniq
2 as
3 exception_test exception;
4 pragma exception_init(exception_test,1);
5 begin
6 insert into t_unique values(1);
7 commit;
8 exception
9 when exception_test then
10 dbms_output.put_line('insert same record,please change other record');
11 end;
12 /
Warning: Procedure created with compilation errors
SQL> show err
Errors for PROCEDURE TBL_BCK.PROC_UNIQ:
LINE/COL ERROR
-------- ------------------------------------------------------------------
3/1 PLS-00701: illegal ORACLE error number 1 for PRAGMA EXCEPTION_INIT
--錯誤碼為100就ok
SQL> create or replace procedure proc_uniq
2 as
3 exception_test exception;
4 pragma exception_init(exception_test,100);
5 begin
6 insert into t_unique values(1);
7 commit;
8 exception
9 when exception_test then
10 dbms_output.put_line('insert same record,please change other record');
11 end;
12 /
Procedure created
--值為-10000000也報錯
SQL> create or replace procedure proc_uniq
2 as
3 exception_test exception;
4 pragma exception_init(exception_test,-10000000);
5 begin
6 insert into t_unique values(1);
7 commit;
8 exception
9 when exception_test then
10 dbms_output.put_line('insert same record,please change other record');
11 end;
12 /
Warning: Procedure created with compilation errors
SQL> show err
Errors for PROCEDURE TBL_BCK.PROC_UNIQ:
LINE/COL ERROR
-------- --------------------------------------------------------------------------
3/1 PLS-00701: illegal ORACLE error number -10000000 for PRAGMA EXCEPTION_INIT
--經測試與官方描述不一致,負數最大界限為-1000000,如果小於它,則報錯,而非官方說的-10000000
SQL> create or replace procedure proc_uniq
2 as
3 exception_test exception;
4 pragma exception_init(exception_test,-1000000);
5 begin
6 insert into t_unique values(1);
7 commit;
8 exception
9 when exception_test then
10 dbms_output.put_line('insert same record,please change other record');
11 end;
12 /
Procedure created
小結:
1,pragma exception_init位於儲存過程宣告定部分
2,真正使用在exception模組,直接引用它的異常即可,編寫對應的異常處理功能程式碼
3,oracle對一些常用的異常:比如插入重複值或未找到資料,已經把異常名稱與錯誤程式碼聯絡起來,而還有大量的oracle錯誤程式碼未
進行聯絡工作,此語句即此功能
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-762140/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- plsql語法之_PRAGMA RESTRICT_REFERENCES()SQLREST
- plsql--PRAGMA關鍵字的討論SQL
- #pragma用法(1)#pragma startup和#pragma exit
- oracle plsql(二)_plsql塊內之**冪OracleSQL
- iOS #pragma clangiOS
- 解析#pragma指令 (轉)
- SQLite的Pragma語句SQLite
- oracle之PLSql語言(一)OracleSQL
- 【C進階】24、#pragma分析
- 編譯指令PRAGMA SERIALLY_REUSABLE編譯
- iOS開發#pragma預處理指令iOS
- oracle自治事務(PRAGMA AUTONOMOUS_TRANSACTION)Oracle
- 【開發篇plsql】plsql遊標SQL
- oracle之PLSql語言(二)sql語句的使用OracleSQL
- 【開發篇plsql】plsql物件型別SQL物件型別
- oracle plsqlOracleSQL
- PLSQL questionsSQL
- plsql tnsnamesSQL
- begin plsqlSQL
- 【開發篇plsql】plsql事務處理SQL
- #pragma data_seg() 共享資料// MyData段 // 程式 // DLL
- 7_Oracle truncate異常恢復之plsql修復OracleSQL
- oracle資料庫之plsql視覺化操作建表Oracle資料庫SQL視覺化
- oracle procedure plsql 動態sql之動態傳遞表OracleSQL
- plsql配置使用SQL
- plsql use skillsSQL
- PLSQL Developer 14SQLDeveloper
- oracle plsql例子OracleSQL
- plsql逐行累加SQL
- PLSQL_PROFILESQL
- plsql建立jobSQL
- oracle plsql之動態sql_輸出拼接的長字串OracleSQL字串
- 【開發篇plsql】plsql資料型別(二) recordSQL資料型別
- VC6使用#pragma warning的一點經驗 (轉)
- 業務中出現plsql打頭的表_plsql_profilter_runsSQLFilter
- plsql_varray_自定義type之測試小例_user_typesSQL
- PLSQL Developer 行號SQLDeveloper
- PLSQL程式語言SQL