--*********異常處理
一、異常的型別
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.捕獲及處理異常
exceptionwhen e_name1 [
or e_name2 ...
]then
statements;
when e_name3 [
or e_name4 ...
]then
statements;
......
when others then
statements;
end;
--使用預定義的異常
--根據用記輸入的商品id來查商品庫存
declarev_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 ...