oracle如何提高内部触发异常?有办法做到这一点吗?

标签: Oracle Exception
发布时间: 2017/4/14 23:57:53
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

还有的情况︰ 如果 Salary 列中的用较少的比原来的值,值更新打印一条错误消息,让不会发生更新。这是我到目前为止所写的东西︰

CREATE OR REPLACE TRIGGER TRIG1
BEFORE UPDATE OF SAL ON EMP
for each row
  USER_XCEP EXCEPTION
  WHEN (NEW.SAL<OLD.SAL)
BEGIN
  RAISE USER_XCEP

EXCEPTION
  WHEN USER_XCEP THEN
       DBMS_OUTPUT.PUT_LINE('UPDATION NOT ALLOWED - ILLEGAL VALUES');
END;

我得到错误-不正确的触发器规格

是否有任何其他方式来实现这一目标?

解决方法 1:

你几乎没有;你需要在触发器中的声明块如果你想要宣布什么;这意味着你 WHEN 子句是在错误的地方。

create or replace trigger trig1
 before update
 of sal
 on emp
 for each row
 when (new.sal < old.sal)

declare    
   user_xcep EXCEPTION;
   PRAGMA EXCEPTION_INIT( user_xcep, -20001 );
begin
   raise user_xcep;
end;

SQL 小提琴

几个要点︰

  1. 从不捕获的异常,然后调用 DBMS_OUTPUT。PUT_LINE;它是毫无意义的。有人在那里以查看每个记录的结果。如果你不想要某事发生引发异常,然后抓住它。这样你可以捕捉这外触发和处理你的希望,我已经向您的异常添加错误代码 (不打印任何东西到 stdout)。
  2. 它是一个小问题,但我已经添加了一个小的空白;不多。我看不见最初在哪里问题是与您的代码,因为你也没有任何。
  3. 你缺少分号后的异常声明和提高。

了解更多关于内部文档中定义的异常

赞助商