ORA-06510: PL/SQL: 未处理的用户定义异常 [Oracle]
Posted
技术标签:
【中文标题】ORA-06510: PL/SQL: 未处理的用户定义异常 [Oracle]【英文标题】:ORA-06510: PL/SQL: unhandled user-defined exception [Oracle] 【发布时间】:2014-12-02 10:32:45 【问题描述】:我对 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
【问题讨论】:
抱歉!正如我所说,我对整个事情都是新手!我认为 mysql 是语言,Oracle 是程序。你能帮我解决我的问题吗? MySQL 是 Oracle 公司拥有的开源 DBMS。术语“Oracle”通常是指名为“Oracle”的 DBMS,Oracle 中存储过程和触发器中使用的语言是 PL/SQL 好的,感谢您的澄清!我在您的个人资料中注意到您对该主题非常了解,因此非常感谢您对这个问题的帮助 【参考方案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;
【讨论】:
谢谢!我试过了,我得到了这个错误:错误:ORA-04082:表级触发器中不允许新或旧引用以上是关于ORA-06510: PL/SQL: 未处理的用户定义异常 [Oracle]的主要内容,如果未能解决你的问题,请参考以下文章