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 异常块不工作的主要内容,如果未能解决你的问题,请参考以下文章