【发布时间】:2017-04-26 20:26:42
【问题描述】:
如何获得此触发器以防止提前不大于 0 或小于 100 的插入?谢谢。
DROP TRIGGER CheckAdvance;
CREATE OR REPLACE TRIGGER CheckAdvance
BEFORE INSERT OR UPDATE OF advance ON titles
FOR EACH ROW
WHEN (new.advance<0 OR new.advance>100)
BEGIN
dbms_output.put_line('Advance is Invalid.');
END;
【问题讨论】:
-
触发器不能改变插入实际发生的事实。为此,为什么不在插入查询中使用一个健康的
WHERE子句? -
如果这是一个设计问题,Tim 上面的评论和@GordonLinoff 在下面的回答都很出色。但是,如果这是一项课堂作业(课堂作业经常要求学生做不应该做的事情,显然是因为教授这些课程的人从来没有花足够的时间作为开发人员来了解好坏),您可以在触发器,在代码主体中捕获它,并
ROLLBACK事务,从而防止插入。请注意,这是不好的做法。 -
@BobJarvis 是的,这是一个课堂问题。我想可能和
RAISE_APPLICATION_ERROR有关。 -
是的,这听起来像教练正在寻找的东西。请记住,这是一个坏主意 - 仅仅因为您抛出异常并不意味着事务将被回滚(尽管我相信如果异常未处理,这是默认行为)。
标签: oracle plsql database-trigger