【问题标题】:PL/SQL EXCEPTION BLOCK Not workingPL/SQL 异常块不工作
【发布时间】: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('BROOKE', 1234, '1-JAN-13');结尾; * 第 1 行出现错误:ORA-06502:PL/SQL:数字或值错误:字符到数字的转换错误 ORA-06512:第 1 行

标签: sql exception plsql


【解决方案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
---------------

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多