Ann*_*il8 3 oracle plsql database-trigger
如何获得此触发器以防止前进不大于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;
Run Code Online (Sandbox Code Playgroud)
"这是一个课堂问题."
我在一次会议上发表演讲后,与一位教授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;
Run Code Online (Sandbox Code Playgroud)
注意事项:
你不应该使用触发器.Oracle(以及一般的SQL)支持检查约束:
alter table titles
add constraint chk_titles_advance check (advance > 0 and advance <= 100);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6497 次 |
| 最近记录: |