Oracle入門(十四B)之PL SQL異常處理

2021-08-20 08:16:40 字數 2616 閱讀 4033

定義:程式執行過程的警告或錯誤成為例外(exception)

其他標準的oracle錯誤,可以自定義異常名,將其與指定oracle錯誤關聯,由系統觸發。

例子:在pl/sql定義部分宣告

some_bad_error exception;

pragma exception_init(some_bad_error,-606);

程式執行中出現的程式設計人員認為的非正常情況。

(1)異常定義

myex exception;   --異常定義

pragma exception_init(myex,-606);   --異常賦錯誤碼,此行可省略

(2)異常丟擲

a.已定義異常

raise myex;   --丟擲已定義異常

b.未定義異常

(3)異常處理

exception

when 異常1 [ or 異常2] then

…pl/sql語句

[when 異常3 [ or 異常4] then]

…[when others then]

…end;

例子:

exception

when no_data_found then

null;

when some_bad_error then

null;

when others then

null;

end;

(1)例1

declare 

v_empno employees.employee_id%type:= &empno;

v_sal employees.salary%type;

begin

select salary into v_sal from employees

where employee_id = v_empno;

if v_sal<=15000 then

dbms_output.put_line('編碼為'||v_empno||'員工該加100元!');

else

dbms_output.put_line('編碼為'||v_empno||'員工工資已經超過規定值!');

end if;

exception

when no_data_found then

dbms_output.put_line('資料庫中沒有編碼為'||v_empno||'的員工');

when too_many_rows then

dbms_output.put_line('程式執行錯誤!請使用游標');

when others then

dbms_output.put_line(sqlcode||'---'||sqlerrm);

end;

(2)例2

set serveroutput on

declare

v_name varchar2(20);

v_email varchar2(25);

v_sal number(8,2);

begin

--v_name:='test';

select first_name, email,salary

into v_name,v_email,v_sal

from employees

where employee_id=102;

exception

when no_data_found then

dbms_output.put_line('你輸入的員工不存在');

when others then

dbms_output.put_line('other');

end;

(3)例3

set serveroutput on

declare

myexception exception;

begin

dbms_output.put_line('準備丟擲異常');

raise myexception; --丟擲異常

dbms_output.put_line('此行不會輸出');

exception

when myexception then

dbms_output.put_line(sqlcode||'---'||sqlerrm);

when others then

dbms_output.put_line('other');

end;

注意:輸出資訊,要設定: set serveroutput on

輸出用: dbms_output.put_line(『』);

輸入變數用: &變數名

show error: 命令顯示錯誤

錯誤**與解決辦法參考: ora 10g err_msg.chm

Oracle入門(十四 18)之使用動態SQL

資料庫中的所有sql語句都經歷了不同的階段 解析 預執行 這可能嗎?檢查包括語法,物件存在,許可權等 繫結 獲取語句中引用的任何變數的實際值 執行 語句被執行。提取 結果返回給使用者。某些階段可能與所有語句無關 例如,提取階段適用於查詢,但不適用於dml。當pl sql子程式中包含sql語句時,解析...

Oracle入門(十四H)之良好的程式設計實踐

一 為什麼要學習它 好的程式設計實踐是技巧,可以按照建立最好的 可能。程式設計實踐涵蓋了一切從 更多可以用更快的速度建立 效能。軟體工程團隊通常會遵循風格指導讓團隊中的每個人使用相同的技術。這使它更容易閱讀和修改編寫的 其他。已經學會了幾種好的程式設計習慣 這個課程 轉化 不要依賴隱式資料型別轉換,...

Oracle入門(十四 23)之管理觸發器

要在模式中建立觸發器,需要 create trigger系統特權 觸發器主體中引用的其他架構中的物件的普通物件特權 select,update,execute等 與觸發器關聯的表或檢視上的alter特權。觸發器主體中的語句使用觸發器所有者的特權,而不是執行觸發觸發器的操作的使用者的特權。下面展示了乙...