我对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
答案 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;