Oracle Exception
1) 基本結構? BEGIN
??? ... --語句
? EXCEPTION -- 例外處理
??? WHEN ...
??? ...
??? WHEN OTHERS
????? ...
? END;
? 2) 常用預定義例外
? EXCEPTION
??? WHEN CURSOR_ALREADY_OPEN THEN -- ORA-06511 SQLCODE = -6511 游標已經打開
????? ...
??? WHEN DUP_VAL_ON_INDEX THEN -- ORA-00001 SQLCODE = -1 向唯一索引中插入重復數據
????? ...
??? WHEN INVALID_CURSOR THEN -- ORA-01001 SQLCODE = -1001 非法游標操作
????? ...
??? WHEN INVALID_NUMBER THEN -- ORA-01722 SQLCODE = -1722 字符向數字轉換失敗
????? ...
??? WHEN LOGIN_DENIED THEN -- ORA-01017 SQLCODE = -1017
????? ...
??? WHEN NO_DATA_FOUND THEN -- ORA-01403 SQLCODE = +100 沒有找到數據
????? ...
??? WHEN NOT_LOGGED_ON THEN -- ORA-01012 SQLCODE = -1012
????? ...
??? WHEN PROGRAM_ERROR THEN -- ORA-06501 SQLCODE = -6501 程序錯誤
????? ...
??? WHEN STORAGE_ERROR THEN -- ORA-06500 SQLCODE = -6500
????? ...
??? WHEN TIMEOUT_ON_RESOURCE THEN -- ORA-00051 SQLCODE = -51
????? ...
??? WHEN TOO_MANY_ROWS THEN -- ORA-01422 SQLCODE = -1422 返回多行
????? ...
??? WHEN TRANSACTION_BACKED_OUT THEN -- ORA-00061 SQLCODE = -61
????? ...
??? WHEN VALUE_ERROR THEN -- ORA-06502 SQLCODE = -6502 數值轉換錯誤
????? ...
??? WHEN ZERO_DIVIDE THEN -- ORA-01476 SQLCODE = -1476 被零除
????? ...
??? WHEN OTHERS THEN -- 其它任何錯誤的處理
????? ...
? END;
? 3) 用戶定義的例外
? DECLARE
??? FIND_DATA_EMP????EXCEPTION;
? BEGIN
??? IF ... THEN
????? RAISE FIND_DATA_EMP;
??? END IF;
? EXCEPTION
??? WHEN LOB_NO_LOCKED THEN
????? ...
? END;
? 4) EXCEPTION_INIT的使用
? PRAGMA EXCEPTION_INIT(例外名, ORACLE錯誤號);
? 注:PRAGMA 是一個編譯器命令,可以認為是對編譯器的一個注釋。
? 例:
? DECLARE
??? ZERO_DIVIDE1????EXCEPTION;
??? PRAGMA EXCEPTION_INIT(ZERO_DIVIDE1, -1476);
? BEGIN
??? ...
? EXCEPTION
??? WHEN ZERO_DIVIDE1 THEN
????? ...
? END;
posted on 2010-08-03 11:32 飛熊 閱讀(524) 評論(0) 編輯 收藏 所屬分類: ORACLE