由三種方式丟擲異常
1. 通過pl/sql執行時引擎
2. 使用
raise語句
當資料庫或pl/sql在執行時發生錯誤時,乙個異常被pl/sql執行時引擎自動丟擲。異常也可以通過
raise語句丟擲
raise exception_name;
顯式丟擲異常是程式設計師處理宣告的異常的習慣用法,但
raise不限於宣告了的異常,它可以丟擲任何任何異常。例如,你希望用timeout_on_resource錯誤檢測新的執行時異常處理器,你只需簡單的在程式中使用下面的語句:
raise timeout_on_resouce;
比如下面乙個訂單輸入的例子,若當訂單小於庫存數量,則丟擲異常,並且捕獲該異常,處理異常
declare
inventory_too_low exception;
---其他宣告語句
begin
if order_rec.qty>inventory_rec.qty then
raise inventory_too_low;
end if
exception
when inventory_too_low then
order_rec.staus:='backordered';
end;
錯誤號的範圍是-20,000到-20,999。錯誤資訊是文字字串,最多為2048位元組。true和false表示是新增(true)進錯誤堆(error stack)還是覆蓋(overwrite)錯誤堆(false)。預設情況下是false。
如下**所示:
if product_not_found then
end if;
當異常丟擲後,控制無條件轉到異常部分,這就意味著控制不能回到異常發生的位置,當異常被處理和解決後,控制返回到上一層執行部分的下一條語句。
begin
declare
bad_credit exception;
begin
raise bad_credit;
--發生異常,控制轉向;
exception
when bad_credit then
dbms_output.put_line('bad_credit');
end;
--bad_credit異常處理後,控制轉到這裡
exception
when others then
--控制不會從bad_credit異常轉到這裡
--因為bad_credit已被處理
end;
當異常發生時,在塊的內部沒有該異常處理器時,控制將轉到或傳播到上一層塊的異常處理部分。
begin
declare ---內部塊開始
bad_credit exception;
begin
raise bad_credit;
--發生異常,控制轉向;
exception
when zero_divide then --不能處理bad_credite異常
dbms_output.put_line('divide by zero error');
end --結束內部塊
--控制不能到達這裡,因為異常沒有解決;
--異常部分
exception
when others then
--由於bad_credit沒有解決,控制將轉到這裡
end;
raise 異常丟擲
try s none if s is none print s 是空物件 raise nameerror 如果引發nameerror異常,後面的 將不能執行 print len s 這句不會執行,但是後面的except還是會走到 except print 空物件沒有長度 s 是空物件 空物件沒有長度...
python 丟擲異常raise
原因 測試資料的時候命名找不到該檔案,但是通過try except的執行狀態卻為 成功 查詢為什麼出錯了仍可以繼續執行try 分支 p os.system python join i,i,start date,end date 而 os.system中會出現值為0,1,2,使得p始終存在資料,就可以...
python中異常處理 raise的使用
python中異常處理 raise的使用 當程式出現錯誤,python會自動引發異常,也可以通過raise顯示地引發異常。一旦執行了raise語句,raise後面的語句將不能執行。演示raise用法 try s none if s is none print s 是空物件 raise nameerr...