gpt4 book ai didi

database - 如何在触发器内引发异常?有没有办法做到这一点?

转载 作者:太空狗 更新时间:2023-10-30 01:53:46 25 4
gpt4 key购买 nike

有这样一种情况:如果 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;

我收到错误消息 - 触发器规范不正确

还有其他方法可以实现吗?

最佳答案

你快到了;你need a DECLARE block in a trigger如果你想申报什么;这意味着您的 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 Fiddle

几点:

  1. 从不捕获异常然后调用 DBMS_OUTPUT.PUT_LINE;没有用。必须有人在那里查看每条记录的结果。如果您不希望发生某些事情,请引发异常然后捕获它。我已将错误代码添加到您的异常中,以便您可以在触发器之外捕获它并按您希望的方式处理它(不要将任何内容打印到标准输出)。
  2. 这是一个小问题,但我添加了一点空白;不多。我最初看不出问题出在你的代码上,因为你没有。
  3. 异常声明和 RAISE 后缺少分号。

the documentation 中阅读有关内部定义异常的更多信息

关于database - 如何在触发器内引发异常?有没有办法做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18682341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com