2013-04-30 1 views
0

У меня есть следующая процедура с блоком исключений. Когда я выполняю эту процедуру, система захватывает ошибку вместо моего блока исключений. У любого есть идеи относительно того, что я делаю неправильно. БлагодаряPL/SQL EXCEPTION BLOCK Не работает

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; 
+1

Может быть, это не ошибка значение? – Hogan

+0

он не работает для какой-либо ошибки, которую я ввел даже в случае ошибки другого пользователя. – bna311

+0

Поместите DBMS_OUTPUT.PUT_LINE сразу после ROLLBACK. И, пожалуйста, отредактируйте свое сообщение и укажите текст сообщения. Благодарю. –

ответ

0

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 
--------------- 
Смежные вопросы