PL/SQL系統定義的異常操作例項講解
阿新 • • 發佈:2018-12-26
程式執行過程中出現錯誤情況被稱為在PL/SQL異常。 PL/SQL支援程式設計師在程式中使用異常塊捕獲這樣的條件並採取適當的動作應對錯誤情況。有兩種型別的異常:系統定義的異常、使用者定義的異常
異常處理語法
一般異常處理的語法如下。在這裡可以列出下來很多,要處理異常。預設的異常將使用WHEN others THEN處理:
DECLARE <declarations section> BEGIN <executable command(s)> EXCEPTION <exception handling goes here > WHEN exception1 THEN exception1-handling-statements WHEN exception2 THEN exception2-handling-statements WHEN exception3 THEN exception3-handling-statements ........ WHEN others THEN exception3-handling-statements END;
預定義異常
PL/SQL提供許多預先定義的異常,這是在被執行時的任何資料庫規則由程式引發。例如,預定義異常NO_DATA_FOUND時引發一個SELECT INTO語句返回資料行。下表列出了一些重要的預先定義的異常:
操作例項一 除以零的操作原始碼異常:
-- Created on 2018/4/2 by E.WANG /* 預設的異常將使用WHEN others THEN處理: DECLARE <declarations section> BEGIN <executable command(s)> EXCEPTION <exception handling goes here > WHEN exception1 THEN exception1-handling-statements WHEN exception2 THEN exception2-handling-statements WHEN exception3 THEN exception3-handling-statements ........ WHEN others THEN exception3-handling-statements END; */ declare --定義一個簡單的變數 i integer; begin -- i:=30; --當沒有任何選擇,在當選擇一個CASE語句的子句,並且沒有ELSE子句時被引發 case when i=35 then dbms_output.put_line('It is right!'); --它被引發當一個數試圖除以零。 when i/0=0 then dbms_output.put_line('Condition is error'); end case; --異常獲取程式碼塊 exception when CASE_NOT_FOUND then dbms_output.put_line('No Case SubState!'); --它被引發當一個數試圖除以零 when ZERO_DIVIDE then dbms_output.put_line('Zero is not divided!'); end;
操作例項一執行結果截圖:
操作例項二 引發異常:
-- Created on 2018/4/2 by E.WANG /* 異常是資料庫伺服器自動在內部資料庫錯誤,但異常可以明確地提出由程式設計師使用命令RAISE。 以下是引發異常的簡單的語法: DECLARE exception_name EXCEPTION; BEGIN IF condition THEN RAISE exception_name; END IF; EXCEPTION WHEN exception_name THEN statement; END; 可以在引發Oracle的標準異常或任何使用者定義的異常使用上述語法。 */ declare --定義一個簡單的變數 i integer; begin -- i:=30; --它被引發當一個數試圖除以零。 if i/0=0 then raise ZERO_DIVIDE; end if; --異常獲取程式碼塊 exception --它被引發當一個數試圖除以零 when ZERO_DIVIDE then dbms_output.put_line('Zero is not divided!'); end;