亚洲最大的av在线,国产精品视频一区二区三区麻豆,欧美久久久久久久久久,www.日本欧美,亚洲456区乱码,在线免费日本

當前位置: Oracle DBA培訓網-優技培訓 >> oracle培訓 > Oracle培訓教程 >

PL/SQL教程:引發應用程序異常處理

PL/SQL教程:引發應用程序異常處理

PL/SQL教程:引發應用程序異常處理?在Oracle開發中,遇到的系統異常都有對應的異常碼,在應用系統開發中,用戶自定義的異常也可以指定一個異常碼和異常信息,Oracle系統為用戶預留了自定義異常碼,其范圍介于-20000到-20999之間的負整數。引發應用程序異常的語法是:

RAISE_APPLICATION_ERROR(異常碼,異常信息)

案例12:引發系統異常

代碼演示:引發應用系統異常

SQL> DECLARE

  2      sal emp.sal%TYPE;

  3      myexp EXCEPTION;

  4  BEGIN

  5      SELECT sal INTO sal FROM emp WHERE ename='JAMES';

  6      IF sal<5000 THEN

  7         RAISE myexp;

  8      END IF;

  9  EXCEPTION

 10      WHEN NO_DATA_FOUND THEN

 11           dbms_output.put_line('NO RECORDSET FIND!');

 12      WHEN MYEXP THEN

 13           RAISE_APPLICATION_ERROR(-20001,'SAL IS TO LESS!');  

 14  END;

 15  /

ORA-20001: SAL IS TO LESS!  

ORA-06512:  line 14

代碼解析:

① 引發應用系統異常,指明異常碼和異常信息。

② 在控制臺上顯示異常碼和異常信息。

如果要處理未命名的內部異常,必須使用OTHERS異常處理器。也可以利用PRAGMA EXCEPTION_INIT把一個異常碼與異常名綁定。

PRAGMA由編譯器控制,PRAGMA在編譯時處理,而不是在運行時處理。EXCEPTION_INIT告訴編譯器將異常名與ORACLE錯誤碼綁定起來,這樣可以通過異常名引用任意的內部異常,并且可以通過異常名為異常編寫適當的異常處理器。PRAGMA EXCEPTION_INIT的語法是:

PRAGMA EXCEPTION_INIT(異常名,異常碼)

這里的異常碼可以是用戶自定義的異常碼,也可以是Oracle系統的異常碼。

案例13:PRAGMA EXCEPTION_INIT異常

代碼演示:PRAGMA EXCEPTION_INIT異常

<<outterseg>>

DECLARE

  null_salary EXCEPTION;

  PRAGMA EXCEPTION_INIT(null_salary, -20101);  

BEGIN

  <<innerStart>>  

  DECLARE

    curr_comm NUMBER;

  BEGIN

    SELECT comm INTO curr_comm FROM emp WHERE empno = &empno;

    IF curr_comm IS NULL THEN   

         RAISE_APPLICATION_ERROR(-20101, 'Salary is missing');  

    ELSE

      dbms_output.put_line('有津貼');

    END IF;

  END; 

EXCEPTION

  WHEN NO_DATA_FOUND THEN

          dbms_output.put_line('沒有發現行');

  WHEN null_salary THEN

          dbms_output.put_line('津貼未知');  

  WHEN OTHERS THEN

           dbms_output.put_line('未知異常');

END;

代碼解析:

① 把異常名稱null_salary與異常碼-20101關聯,該語句由于是預編譯語句,必須放在聲明部分。也就是說-20101的異常名稱就是null_salary。

② 嵌套PL/SQL語句塊

③ 在內部PL/SQL語句塊中引發應用系統異常-20101。

④ 在外部的PL/SQL語句塊中就可以用異常名null_salary進行捕獲。

技術沙龍MORE+

標簽錯誤:<!-- #Label# labelId=20160707140604 moduleId=1 classId=12231768634 orderby=2 fields=url,title,u_info attribute= datatypeId=22192428132 recordCount=3 pageSize= <htmlTemplate><dt><img src="/images/index_26${index}.jpg" width="100" height="62" /><a href="$url" title="${title}">${title}</a><span>${api.left(u_info,60)}</span></dt></htmlTemplate> -->
我要參加技術沙龍