內部定義的異常

內部定義的異常沒有名稱,但它有自己的程式碼。

什麼時候用?

如果你知道資料庫操作可能會引發那些沒有名稱的特定異常,那麼你可以為它們指定名稱,以便你可以專門為它們編寫異常處理程式。否則,你只能將它們與 others 異常處理程式一起使用。

句法

declare 
    my_name_exc exception;
    pragma exception_init(my_name_exc,-37);
begin
    ...
exception 
    when my_name_exc then
        do something
end;

my_name_exc exception; 即異常名稱宣告。

pragma exception_init(my_name_exc,-37); 將名稱分配給內部定義的異常的錯誤程式碼。

我們有一個 emp_id,它是 emp 表中的主鍵和 dept 表中的外來鍵。如果我們嘗試在有子記錄時刪除 emp_id,則會使用程式碼 -2292 丟擲異常。

create or replace procedure remove_employee
is
    emp_exception exception;
    pragma exception_init(emp_exception,-2292);
begin
    delete from emp where emp_id = 3;
exception
    when emp_exception then
        dbms_output.put_line('You can not do that!');
end;
/

Oracle 文件說:“具有使用者宣告名稱的內部定義的異常仍然是內部定義的異常,而不是使用者定義的異常。”