1、触发器类型
1)语句级触发器
在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行记录。
2)行级触发器
影响几行记录执行几次,可以使用:old和:new伪记录变量。
2、语法
create [or replace] trigger 触发器名
{before|after}
{delete|insert|update[of 列名]}
on 表名
[for each row [where(条件)]]
PLSQL块
例1:插入记录后,打印成功提示
create or replace trigger hello
after insert
on emp10
declare
begin
dbms_output.put_line('成功插入记录');
end;
3、应用
(1)实施复杂的安全性检查:
例2:禁止在非工作时间 插入新员工
create or replace trigger securityEmp10
before insert on emp10
declare
begin
if to_char(sysdate,'day') in('星期六','星期日') or
to_number(sysdate,'hh24') not between 9 and 17 then
raise_application_error(-20001,'禁止在非工作时间插入数据');
end if;
end;
注意:raise_application_error()中的错误序号只能在-2000到-20999之间
(2)数据的确认:
例3:涨后的薪水不能少于涨前的薪水
create or replace trigger checkSalary
before update on emp10
for each row
declare
-- local variables here
begin
if :old.sal>:new.sal then
raise_application_error(-20002,'工资只能增加,不能降低');
end if;
end checkSalary;