Oracle触发器
触发器是一个能够自动执行的PLSQL块。
当表的状态发生改变的时候,那么该表中对应的触发器就会自动触发,然后执行触发器中PLSQL块。
触发器监控表的记录是否 修改【insert、update、delete】
创建触发器
create or replace trigger 触发器的名称
after|before --触发时间:在执行DML操作之前before或之后after触发;
insert|update|delete --触发事件:常用的触发事件有添加insert、修改update、删除delete;
on 表名 --on 指定表名 ,用of指定列名
[for each row] --如果指定该参数,那么每影响一条记录就会触发一次
declare
begin
--触发动作:就是一个PLSQL块;
end;
create or replace trigger tri_add_emp
before --触发事时间
insert on emp --触发事件
for each row
begin
dbms_output.put_line('触发动作...');
end;
create or replace trigger tri_emp_insert_data_success
after
insert
on emp
declare
begin
dbms_output.put_line('你插入成功啦!');
end;
insert into emp (empno,ename) values (8888,'aaaa');
commit;
select * from emp;
create or replace trigger tri_emp_update_sal
before
update
on emp
--行级触发器
for each row
declare
begin
if :old.sal > :new.sal then
raise_application_error(20001,'亲,不能给员工降薪哦!');
end if;
end;
update emp set sal = sal-1 where empno=7369;
commit;
select * from emp;
create sequence seq_emp_empno;
create or replace trigger tri_generate_pk
before --在插入数据之前触发存储函数
insert on emp --插入数据事件
for each row --每影响一条记录就会触发一次
begin
select seq_emp_empno.nextval into :new.empno from dual;
end;
create trigger tri_del_emp
before --在删除表中数据之前触发
delete on emp --删除事件
for each row
begin
--触发动作,如果删除了数据,那么就进行备份
insert into emp_bak(empno,ename,sal)
values(:old.empno,:old.ename,:old.sal);
end;
触发器的管理
alter trigger 触发器 disable|enable;
alter table 表名 disable|enable all triggers;
drop trigger 触发器;