PL / SQL触发器以防止插入

时间:2017-05-30 14:32:23

标签: sql oracle plsql triggers

我需要在PL / SQL中编写触发器。我希望在条件为真时阻止插入。

CREATE OR REPLACE TRIGGER SafeRent AFTER INSERT ON Rent
FOR EACH ROW 
DECLARE
BEGIN
    IF :NEW.id_status IN (1,2) THEN
        DELETE FROM Rent WHERE id_rent = :NEW.id_rent;
    END IF;
END;

代码的扩展:如果id_status等于1或2,我想要插入不要完成。

这是我写的触发器。如果条件为真,它会在插入后删除(我想,我没有测试过)记录。

在插入之前有没有办法阻止它?

我正在考虑在“插入之前”中增加例外情况。类型触发器,这是一个很好的解决方案吗?

PS:它必须是触发器,我知道它可以作为Check约束实现。

2 个答案:

答案 0 :(得分:5)

触发器是错误的方法。相反,请使用... ( empid, empname, x1 FILLER, x2 FILLER, department ) 约束:

check

答案 1 :(得分:2)

我认为你应该使用BEFORE INSERT触发器。
也许使用Raise_Application_Error()
例如:

CREATE OR REPLACE TRIGGER HelloWorld
BEFORE INSERT ON TableA
FOR EACH ROW
BEGIN
        IF :NEW.id_status IN (1,2) THEN
                Raise_Application_Error (-20100, 'Something to post when raising error.');
        END IF;
END;
/