防止插入触发器

安妮希尔8

我如何获得此触发器以防止前进量不大于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;
装甲运兵车

“这是一个阶级问题。”

我在一次会议上作了演讲后,和一位大学讲师讲了话,后者讲授PL / SQL。我的演讲是关于PL / SQL的良好实践的。我的一张幻灯片只是说“不要使用触发器”。这位讲师告诉我,他发现这样的建议很难与课程需求相吻合。他们必须教给学生所有语法,但他承认,他们经常设置任务,要求我们在专业编写软件时不会使用的解决方案。

这是一个问题。正确的方法是使用检查约束,如戈登的答案所示约束更有效,也很惯用。但是您的老师希望您编写触发器,所以这是您的代码,已更正。

CREATE OR REPLACE TRIGGER CheckAdvance
    BEFORE INSERT OR UPDATE OF advance ON titles
    FOR EACH ROW
BEGIN
    IF (:new.advance < 0  
         OR :new.advance > 100)
    THEN
        raise_application_error(-20000
                , 'Advance cannot be less than zero or greater than one hundred.');
    END IF;
END;

注意事项:

  1. CREATE OR REPLACE意味着我们可以在没有初步DROP语句的情况下更改触发代码。
  2. BEGIN和END框架代码块,例如触发器主体。
  3. 静态条件以IF ... END IF关键字构成;WHEN用于退出循环构造。
  4. 使用:NEW(和:OLD)关键字的参考表列值-注意冒号。
  5. 使用RAISE_APPLICATION_ERROR引发异常;错误号必须在-20999到-20000的范围内,Oracle保留该错误号用于用户定义的异常。
  6. 使您的错误消息有意义:告诉用户他们做错了什么,而不是让他们猜测。
  7. 学习使用缩进使代码可读。您未来的同事将为此感谢您。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章