plsql中的異常一般有兩種:
1、oracle 內部錯誤丟擲的異常:這又分為預定義異常(有錯誤號+常量定義) 和 非預定義例外 (僅有錯誤號,無常量定義)
2、程式設計師顯式的丟擲的異常
處理預定義的例外:有些常見例外,oracle 都已經預定義好了,使用時無需預先宣告,比如:
–no_data_found (沒找到資料)
–too_many_rows (列數超過範圍)
–invalid_cursor
–zero_divide (被除數不能為0)
–dup_val_on_index
-value_error (資料賦值錯誤)
丟擲異常:
declare
v_data number;
v_myexp exception; --定義乙個異常變數
begin
v_data :=&inputdata; --輸入資料
if v_data>10 and v_data<100 then
raise v_myexp;
處理異常:
使用exception處理異常:
例如處理被除數為0的異常:
declare
v_result number;
begin
v_result:=10/0;
dbms_output.put_line('異常之後的**將不再執行!');
exception
when zero_divide then
dbms_output.put_line('被除數不能為0!');
when others then
dbms_output.put_line('其他未知異常');
rollback;
v_error_code := sqlcode ;
v_error_message := sqlerrm ;
end;
發生這種情況時,我們還是希望了解當時發生的oracle錯誤號和相關描述資訊,oracle 提供了兩個內建函式 sqlcode 和 sqlerrm 分別用來返回oracle 錯誤號和錯誤描述
注意:1.異常之後的**將不再執行
2.異常可以巢狀
3.異常未處理會往外一層丟擲
others的處理: others表明我們程式設計師未能預計到這種錯誤,所以全部歸入到others 裡面去了
自定義異常:
方式一:在宣告塊中宣告exception物件,此方式有兩種選擇:
1.宣告異常物件並用名稱來引用它,此方式使用普通的others異常捕獲使用者定義異常;
2.宣告異常物件並將它與有效的oracle錯誤**對映,需要編寫單獨的when語句塊捕獲;
例如:declare
v_data number;
v_myexp exception; --定義乙個異常變數
begin
v_data :=&inputdata; --輸入資料
if v_data>10 and v_data<100 then
raise v_myexp;
end if;
exception
when v_myexp then
dbms_output.put_line('輸入資料有錯誤1');
dbms_output.put_line('sqlcode='||sqlcode);
dbms_output.put_line('sqlerrm='||sqlerrm);
end;
declare
v_data number;
v_myexp exception; --定義乙個異常變數
begin
v_data :=&inputdata; --輸入資料
if v_data>10 and v_data<100 then
end if;
exception
when v_myexp then
dbms_output.put_line('輸入資料有錯誤1');
dbms_output.put_line('sqlcode='||sqlcode);
dbms_output.put_line('sqlerrm='||sqlerrm);
PL SQL中的異常處理
pl sql 程式在執行的過程當中,可能會出現錯誤或者異常的情況,例如無法建立與oracle的連線,或者返回多行的錯誤。好的程式應該是對可能發生的異常情況進行處理,異常處理 在exception中實現。可以在exception塊中使用when語句來定義異常處理。when語句的使用方法如下 excep...
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 字元向數字轉換失敗 響...