ORA-06510:PL / SQL:未处理的用户定义异常[Oracle]

时间:2014-12-02 10:32:46

标签: oracle exception plsql triggers

我对Oracle比较新,请原谅我缺乏知识。每当触发此触发器时,我都会收到一条错误消息,指出我有一个未处理的用户定义异常。在我的函数和过程的其他地方,我已经声明并提出了我的用户定义,但在这种情况下是不行的。我知道这可能是一件微不足道的事情,但正如我所说的那样,我对Oracle很新,所以请原谅我。

CREATE OR REPLACE TRIGGER PROGRAMME_BI
BEFORE INSERT ON PROGRAMME
DECLARE
v_run_time programme.run_time%TYPE;
INVALID_DURATION EXCEPTION;
BEGIN
IF v_run_time > 5 THEN
  DBMS_OUTPUT.PUT_LINE('Program duration is valid');
  COMMIT;
ELSE
  RAISE INVALID_DURATION;
END IF;
EXCEPTION
  WHEN INVALID_DURATION THEN
    RAISE_APPLICATION_ERROR(-20001,'Program duration is not long enough');
  ROLLBACK WORK;
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLCODE||SQLERRM);
END;

更新 在引发异常后我更新了这一行,因此它不再给我带来未处理的用户定义的异常错误。但是它仍然没有按预期工作。每当我输入大于5的程序持续时间时,我在DBMS输出窗口中得到以下内容。

-20001ORA-20001: Program duration is not long enough
ORA-06512: at "DT2113A.PROGRAMME_BI", line 13
ORA-04088: error during execution of trigger 'DT2113A.PROGRAMME_BI'
Program not added

1 个答案:

答案 0 :(得分:1)

您必须为v_run_time分配值请尝试以下

CREATE OR REPLACE TRIGGER PROGRAMME_BI
BEFORE INSERT ON PROGRAMME
FOR EACH ROW
DECLARE
v_run_time programme.run_time%TYPE:=:new.run_time;
INVALID_DURATION EXCEPTION;
BEGIN
 IF v_run_time > 5 THEN
 DBMS_OUTPUT.PUT_LINE('Program duration is valid');
  COMMIT;
ELSE
RAISE INVALID_DURATION;
END IF;
EXCEPTION
 WHEN INVALID_DURATION THEN
  RAISE_APPLICATION_ERROR(-20001,'Program duration is not long enough');
  ROLLBACK WORK;
 WHEN OTHERS THEN
  DBMS_OUTPUT.PUT_LINE(SQLCODE||SQLERRM);
END;