Oracle中RAISE異常詳解

2021-06-02 02:06:46 字數 1724 閱讀 3498

由三種方式丟擲異常

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