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

未定义的错误异常处理 inpl/sql

PL/SQL 中未更新的行

PL/SQL结构

ORACLE PL/SQL编程总结

PL/SQL数据开发那点事

sqlplus pl/sql Date/Time 用户输入理解为绑定变量