pl sql 內部程式塊 異常處理

2021-08-31 09:55:42 字數 3615 閱讀 9448

declare

--子程式宣告部分,例如定義變數,常量,游標

begin

-- 子程式編寫sql語句

exectption

-- 子程式處理異常

end;

sql> declare

2 v_x number :=30; --全域性變數

3 begin

4 declare

5 v_x varchar2(40):='abc'; --區域性變數,只能在內部程式塊中使用

6 v_y number:=30;

7 begin

8 dbms_output.put_line('內部程式塊中輸出: v_x ='||v_x);

9 dbms_output.put_line('內部程式塊中輸出: v_y ='||v_y);

10 end;

11 dbms_output.put_line('外部程式塊中輸出: v_x ='||v_x);

12 end;

13 /

內部程式塊中輸出: v_x =abc

內部程式塊中輸出: v_y =30

外部程式塊中輸出: v_x =30

pl/sql 過程已成功完成。

異常處理語法

when 異常型別 | 使用者定義異常 | 異常** | others then

異常處理;

sql> declare

2 v_result number;

3 begin

4 v_result :=10/0;

5 exception

6 when zero_divide then

7 dbms_output.put_line('被除數不能為0');

8 dbms_output.put_line('sqlcode = '|| sqlcode );

9 end;

10 /

被除數不能為0

sqlcode = -1476

pl/sql 過程已成功完成。

使用者定義異常

方式1:

宣告異常物件並用名稱來引用它,使用others 異常捕獲使用者定義的異常

方式2:

宣告異常物件並將他與有效的oracle錯誤**對映,需要編寫單獨的when

語句捕獲

sql> declare

2 v_data number;

3 v_myexp exception;

4 begin

5 v_data:=&inputdata;

6 if v_data >10 then

7 raise v_myexp;

8 end if;

9 exception

10 when others then

11 dbms_output.put_line('輸入資料錯誤');

12 dbms_output.put_line('sqlcode = '|| sqlcode );

13 dbms_output.put_line('sqlerrm = '|| sqlerrm );

14 end;

15 /

輸入 inputdata 的值: 20

原值 5: v_data:=&inputdata;

新值 5: v_data:=20;

輸入資料錯誤

sqlcode = 1

sqlerrm = user-defined exception

pl/sql 過程已成功完成。

為自定義異常設定異常**

pragma exception_init(異常名稱,oracle錯誤**);

sql> declare

2 v_data number;

3 v_myexp exception;

4 pragma exception_init(v_myexp,-20789);

5 begin

6 v_data:=&inputdata;

7 if v_data >10 then

8 raise v_myexp;

9 end if;

10 exception

11 when others then

12 dbms_output.put_line('輸入資料錯誤');

13 dbms_output.put_line('sqlcode = '|| sqlcode );

14 dbms_output.put_line('sqlerrm = '|| sqlerrm );

15 end;

16 /

輸入 inputdata 的值: 20

原值 6: v_data:=&inputdata;

新值 6: v_data:=20;

輸入資料錯誤

sqlcode = -20789

sqlerrm = ora-20789:

pl/sql 過程已成功完成。

sql> declare

2 v_data number;

3 v_myexp exception;

4 pragma exception_init(v_myexp,-20789);

5 begin

6 v_data:=&inputdata;

7 if v_data >10 then

9 end if;

10 exception

11 when others then

12 dbms_output.put_line('輸入資料錯誤');

13 dbms_output.put_line('sqlcode = '|| sqlcode );

14 dbms_output.put_line('sqlerrm = '|| sqlerrm );

15 end;

16 /

輸入 inputdata 的值: 20

原值 6: v_data:=&inputdata;

新值 6: v_data:=20;

輸入資料錯誤

sqlcode = -20789

sqlerrm = ora-20789: 資料有誤

pl/sql 過程已成功完成。

pl sql異常處理

丟擲異常 oracle有三種型別的異常錯誤 1 預定義 predefined 異常 oracle預定義的異常情況大約有24個。對這種異常情況的處理,無需在程式中定義,由oracle自動將其引發。2 非預定義 predefined 異常 即其他標準的oracle錯誤。對這種異常情況的處理,需要使用者在...

PLSQL 異常處理

1.異常塊begin pl sql塊 exception when no data found then 沒有找到資料 響應命令 when too many rows then 返回多行,隱式游標每次只能檢索一行資料 響應命令 when invalid number then 字元向數字轉換失敗 響...

plsql異常處理

1.在plsql 中 形式引數和 where 語句中的引數不能一樣,否則的話就就會出現個中莫名其妙的錯誤。function validate import supplier p task seq in number,任務號 p line num in number,行號 p vendor name ...