触发器语法:
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. 触发器的类型
①语句级触发器
-- 在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行。
②行级触发器(有语句:for each row)
-- 触发语句作用的每一条记录都被触发。在行级触发器中使用:old和:new伪记录变量,识别值得状态。
两种类型举例,例如:
insert into emp2 select * from emp where dempno=10;
比如这条插入语句dempno=10有3条数据,即一次会插入3条语句。
对于语句级触发器只会调用一次。针对表,只对表有影响。
对于行级触发器则会调用3次。针对行,影响多少行调用几次。
2. 触发器的使用场景
①实施复杂的安全性检查。例如:禁止在非工作时间插入数据。周末或上班前下班后
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;
原文:https://www.cnblogs.com/henn/p/12601730.html