--触发器
--1.概念:具备某些条件时,由数据库自动执行的一些DML操作行为;
--2.语句触发器,针对整个表(主要用户权限判断和日志操作)
--语法:
create trigger 触发器名称
before/after 出发动作(可以触发多个动作,用or连接)
on 作用对象
--谓词:用于记录用户操作日志,比如某个用户什么时间进行了什么操作;
触发器谓词:inserting,updating ,deleting
--示例1:insert
create trigger tr_book
before insert
on t_book
begin
if user != 'cc' then --如果不是cc用户,就报错
raise_application_error(-20001,'权限不足');
end if;
end;
--示例2:update or delete
create trigger tr_book2
before update or delete
on t_book
begin
if user != 'cc' then --如果不是cc用户,就报错
raise_application_error(-20001,'权限不足');
end if;
end;
--示例3,记录用户操作日志:
create trigger tr_book_log
before insert or update or delete
on t_book
begin
--用谓词记录日志
if updating then --更新操作
insert into t_book_log values(book_seq.nextval,user,'update',sysdate);
else if inserting then --插入操作
insert into t_book_log values(book_seq.nextval,user,'insert',sysdate);
else if deleting then --删除操作
insert into t_book_log values(book_seq.nextval,user,'delete',sysdate);
end if;
end if;
end if;
end;
/
--3.行触发器(常用,重点)
--语法:
create trigger 触发器名称
before/after 出发动作
for each row
on 作用对象
触发器谓词::old , :new
--示例1:t_book表中每新增一条记录,都把对应的t_book_type相应的类别加1;
--:new可以记录新增的数据
create trigger t_book_add
after insert
on t_book
for each row
begin
update t_book_type set num = num +1 where id = :new.typeid;
end;
/
--示例2:t_book表中每删除一条记录,都把对应的t_book_type相应的类别减1;
--:old可以记录删除的数据
create trigger t_book_del
after delete
on t_book
for each row
begin
update t_book_type set num = num - 1 where id = :old.typeid;
end;
/
--4.触发器的禁用和开启
--禁用触发器:alter trigger 触发器名称 disable
--开启触发器:alter trigger 触发器名称 enable
--示例:
alter trigger tr_book disable;--禁用
alter trigger tr_book disable;--开启