PL/SQL 异常块不工作

Posted

技术标签:

【中文标题】PL/SQL 异常块不工作【英文标题】:PL/SQL EXCEPTION BLOCK Not working 【发布时间】:2013-04-30 23:20:37 【问题描述】:

我有以下带有异常块的过程。当我执行此过程时,系统正在捕获错误而不是我的异常块。任何人都对我做错了什么有任何想法。谢谢

    CREATE OR REPLACE PROCEDURE ADD_ORDER
       (CUST_NUM IN CUSTOMERS_T_P2.CNO%TYPE,
       EMP_NUM IN EMPLOYEE_T_P2.ENO%TYPE,
       REC_DATE IN  ORDERS_T_P2.RECEIVED%TYPE)
     IS
     BEGIN
     IF REC_DATE IS NULL THEN
       INSERT INTO ORDERS_T_P2 (ONO, CNO, ENO, RECEIVED)
        VALUES
          (ORDER_NUMBER_SEQ.NEXTVAL, CUST_NUM, EMP_NUM, SYSDATE);
     ELSE 
        INSERT INTO ORDERS_T_P2 (ONO, CNO, ENO, RECEIVED)
          VALUES
           (ORDER_NUMBER_SEQ.NEXTVAL, CUST_NUM, EMP_NUM, REC_DATE);
     END IF;

    EXCEPTION
    WHEN VALUE_ERROR THEN
       ROLLBACK WORK;
         INSERT INTO ORDER_ERRORS_T_P2 
          VALUES
          (ORDER_NUMBER_SEQ.NEXTVAL, SYSDATE, 'STRING WAS ENTERED INSTEAD OF NUMBER');
             DBMS_OUTPUT.PUT_LINE('STRING WAS ENTERED INSTEAD OF NUMBER');
       END;

【问题讨论】:

可能不是值错误? 它不适用于我输入的任何错误,即使是当其他人错误时 将 DBMS_OUTPUT.PUT_LINE 放在 ROLLBACK 之后。请编辑您的消息并包含确切的消息文本。谢谢。 抱歉,这是一个愚蠢的问题,但确切的消息文本是什么意思? 将 DBMS_OUTPUT.PUT_LINE 放在 ROLLBACK 之后。这是我得到的错误 BEGIN ADD_ORDER('***E', 1234, '1-JAN-13');结尾; * 第 1 行出现错误:ORA-06502:PL/SQL:数字或值错误:字符到数字的转换错误 ORA-06512:第 1 行 【参考方案1】:

VALUE_ERROR 应该在 DECLARE 块中声明为异常

CREATE OR REPLACE PROCEDURE ADD_ORDER
       (CUST_NUM IN CUSTOMERS_T_P2.CNO%TYPE,
       EMP_NUM IN EMPLOYEE_T_P2.ENO%TYPE,
       REC_DATE IN  ORDERS_T_P2.RECEIVED%TYPE)
     IS
VALUE_ERROR EXCEPTION;

     BEGIN
---------------

【讨论】:

以上是关于PL/SQL 异常块不工作的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL:我的程序工作正常,但不是我的例外?

PL/SQL 引发处理异常

PL/SQL 异常不会引发

PL-SQL

PL/SQL:捕获编号异常?

PL/SQL 异常以啥顺序引发?