- CREATE OR REPLACE TRIGGER trigger_name
- {
- BEFORE | AFTER
- }
{INSERT | DELETE | UPDATE [OF column [, column ...]]} -- 可跟 update 具体列
ON [schema.]table_name | [schema.]view_name -- 表名或视图名
[FOR EACH ROW ] WHEN 条件 -- 有 for each row 为行级触发器, 没有则为语句触发器. when 后可跟条件, 比如只针对某个部门号的员工做更新.
1. 触发器的类型
1语句级触发器
-- 在指定的操作语句操作之前或之后执行一次, 不管这条语句影响了多少行.
2行级触发器 (有语句: for each row)
-- 触发语句作用的每一条记录都被触发. 在行级触发器中使用: old 和: new 伪记录变量, 识别值得状态.
两种类型举例, 例如:
insert into emp2 select * from emp where dempno=10;
比如这条插入语句 dempno=10 有 3 条数据, 即一次会插入 3 条语句.
对于语句级触发器只会调用一次. 针对表, 只对表有影响.
对于行级触发器则会调用 3 次. 针对行, 影响多少行调用几次.
2. 触发器的使用场景
1实施复杂的安全性检查. 例如: 禁止在非工作时间插入数据. 周末或上班前下班后
- create or replace trigger intoemp
- before insert
on emp -- 无 for each row, 说明创建的是语句级触发器.
- declare
- begin
- if to_char(sysdate,'day') in('星期六','星期日') or
- to_number(to_char(sysdate,'hh24')) not between 9 and 18
- then
- RAISE_APPLICATION_ERROR(-20000, '非工作日禁止插入数据');
- end if;
- end;
触发器
来源: http://www.bubuko.com/infodetail-3484787.html