Oracle——異常輸出

在運行程序時出現的錯誤叫做異常。發生異常後,語句將停止執行,控制權轉移到 PL/SQL 塊的異常處理部分。如果發生與某個異常名稱相匹配的異常時,程序就會執行與其相應的THEN後面的代碼,若沒有相匹配的異常則執行OTHERS對應的TEHN後面的代碼。

異常有兩種類型:

1、系統定義異常 PL/SQL 程序違反 Oracle 規則或超越系統限制時隱式引發。

2、用戶定義異常  用戶可以在 PL/SQL 塊的聲明部分定義異常,自定義的異常通過 RAISE 語句顯式引發。

語法

EXCEPTION
   WHEN  exception_name1  THEN
       statement1;
   WHEN  exception_name2  THEN
       statement2;
   ......
   WHEN  OTHERS THEN
       other_statements;

系統常用異常

異常

說明

INVALID_NUMBER

非法數字

NO_DATA_FOUND

未查找到數據

PROGRAM_ERROR

程序錯誤

TOO_MANY_ROWS

查詢多行錯誤

ZERO_DIVIDE

除數爲0錯誤

LOGIN_DENIED

登陸受限

ACCESS_INTO_NULL

未初始化對象

DECLARE
    v_empno  emp.empno%TYPE;
    v_emp emp%ROWTYPE;
BEGIN
    v_empno:=&員工編號; --要求輸入員工編號
    select * into v_emp from emp where empno=v_empno;
    DBMS_OUTPUT.PUT_LINE(‘編號是’||v_empno||‘的員工姓名是'||v_emp.ename);
EXCEPTION
       WHEN NO_DATA_FOUND THEN
           DBMS_OUTPUT.PUT_LINE('編號是'||v_empno||'的員工不存在!');
       WHEN OTHERS THEN
           DBMS_OUTPUT.PUT_LINE('錯誤號是'||SQLCODE);
           DBMS_OUTPUT.PUT_LINE('錯誤原因是'||SQLERRM);
END;
DECLARE 
	v_name emp.ename%type;
 BEGIN
	SELECT ename INTO  v_name FROM emp;
     EXCEPTION
	WHEN TOO_MANY_ROWS THEN
	  DBMS_OUTPUT.PUT_LINE('該查詢提取多行');
     END;

用戶自定義異常

用戶自定義異常機制應用步驟

1、DECLARE 中聲明異常:自定義異常名   EXCEPTION;

2、根據條件註冊異常,即什麼情況下將產生自定義的異常:RAISE   自定義異常名

3、異常處理:

(1)、EXCEPTION

    WHEN 自定義異常名 THEN

      RAISE_APPLICATION_ERROR(error_number,error_message);

(2)、 error_number:錯誤號,取值範圍-20000-20999

(3)、error_message:錯誤信息,最大爲2048個字節

示例:

DECLARE
    v_empno  emp.empno%TYPE;
    v_emp emp%ROWTYPE;
    empno_no_found  EXCEPTION;--自定義異常
    v_count PLS_INTEGER;--帶符號整數
    
BEGIN
    v_empno:=&員工編號;
    select count(*) into v_count from emp where empno=v_empno;
    IF v_count<1 THEN
       RAISE empno_no_found;--註冊異常
    END IF;
    select * into v_emp from emp where empno=v_empno;
    DBMS_OUTPUT.PUT_LINE('編號是'||v_empno||'的員工姓名是'||v_emp.ename);
    EXCEPTION
       WHEN empno_no_found  THEN
           RAISE_APPLICATION_ERROR(-20001,'該編號的員工不存在!');
 END;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章