【问题标题】:trigger to stop the execution of SQl query触发停止执行 SQl 查询
【发布时间】:2013-10-12 19:37:34
【问题描述】:
CREATE OR REPLACE trigger million_trigger
BEFORE INSERT or UPDATE on employee
FOR EACH ROW
WHEN (new.SALARY>1000000)

DECLARE
txt EXCEPTION;

BEGIN
if INSERTING or UPDATING then 

    RAISE txt ;

end if;

EXCEPTION
    WHEN txt THEN
        DBMS_OUTPUT.PUT_LINE('SALARY TOO HIGH');
end;
/

您好,我创建了一个触发器,用于检查表员工的薪水是否大于 1,000,000。如果薪水更高,则触发器应该停止执行存储过程中的插入语句。触发器已成功创建,但是当我插入一条薪水 > 1,000,000 的记录时,什么也没有发生。 (记录被插入 - 这不应该发生)有什么想法吗?

【问题讨论】:

    标签: sql oracle stored-procedures triggers


    【解决方案1】:

    您正在捕获异常,因此触发器不会引发错误。由于触发器不会引发错误,INSERT 语句将继续并最终成功。如果您碰巧在会话中启用了serveroutput,您会看到“Salary too high”消息,但您不应该依赖写入dbms_output 缓冲区的数据被任何人读取。

    如果您想停止执行INSERT 语句,您需要删除您的异常处理程序。最有可能的是,您还想更改引发异常的方式

    IF( :new.salary > 1000000 )
    THEN
      RAISE_APPLICATION_ERROR( -20001, 'Salary too high' );
    END IF;
    

    【讨论】:

    • @Nidhin_toms - 小世界!
    猜你喜欢
    • 2011-06-14
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    相关资源
    最近更新 更多