PL SQL基礎 異常處理

2022-04-20 00:48:00 字數 3075 閱讀 7112

--*********異常處理

一、異常的型別

oracle異常分為兩種型別:系統異常、自定義異常。

其中系統異常又分為:預定義異常和非預定義異常。

1.預定義異常

oracle定義了他們的錯誤編號和異常名字,常見的預定義異常處理oracle常見的錯誤

no_data_found select ... into ... 時,沒有找到資料

dul_val_on_index 試圖在乙個有惟一性約束的列上儲存重複值

cursor_already_open 試圖開啟乙個已經開啟的游標

too_many_rows select ... into ... 時,查詢的結果是多值

zero_divide 零被整除

2.非預定義異常

oracle為它定義了錯誤編號,但沒有定義異常名字。我們使用的時候,先聲名乙個異常名,

通過偽過程pragma exception_init,將異常名與錯誤號關聯起來。

3.自定義異常

程式設計師從我們業務角度出發,制定的一些規則和限制。

二、異常處理

pl/sql中,異常處理按個步驟進行:

定義異常

丟擲異常

捕獲及處理異常

a.定義異常

exception_name exception;

b.丟擲異常

raise exception_name

c.捕獲及處理異常

exception

when e_name1 [

or e_name2 ...

]then

statements;

when e_name3 [

or e_name4 ...

]then

statements;

......

when others then

statements;

end;

--使用預定義的異常

--根據用記輸入的商品id來查商品庫存

declare

v_id es_product.id

%type :=

&v_id; --

使用者輸入商品id

v_stockcount es_product.stockcount%type; --

-庫存量

begin

select stockcount into v_stockcount from es_product where id =

v_id;

dbms_output.put_line(

'庫存量:'||

v_stockcount);

--判斷庫存量是否正常

if v_stockcount >

0then

--更新庫存,一次買乙個減掉乙個

update

es_product

set stockcount = stockcount -1--

更新指定的,不然會全部更新

where id =

v_id;

--提出資料操作

commit

;dbms_output.put_line(

'庫存更新成功');

elsif v_stockcount =0

then

dbms_output.put_line(

'庫存量是0,沒有庫存了');

else

dbms_output.put_line(

'庫存異常');

endif

;exception

when no_data_found then

dbms_output.put_line(

'該商品不存在!');

rollback

;when too_many_rows then

dbms_output.put_line(

'該商品存在多個!');

rollback

;when others then

dbms_output.put_line(

'發生了其它錯誤!');

rollback

;end;

--自定義異常

--實現訂單刪除

select

*from

es_order;

declare

e_no_result exception;

v_id es_order.id

%type :=

&id;

v_exception1 constant

varchar2(50) :=

'刪除資料不成功!';

v_exception2 constant

varchar2(50) :=

'發生了錯誤!';

begin

delete

from es_order where id =

v_id;

if (sql%notfound) then

--刪除沒有執行

raise e_no_result;

endif

;exception

when e_no_result then

dbms_output.put_line(v_exception1);

rollback

;when others then

dbms_output.put_line(v_exception2);

rollback

;end;

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 ...