--触发器:以独立的对象存在,不能主动调用,由事件隐式触发
--触发器类型:
1.DML触发器:如insert,delete,update语句对行级或语句级进行触发, 一般是使用行级
2.替代触发器:专门进行视图操作,解决的问题:不能直接对由两个以上的表建立的视图进行操作
3.系统触发器:如DDL或oracle系统的启动与关闭等系统事件。
--DML触发器语法举例:当删除tb_clazz中的数据时,向备份表tb_clazz_back中插入一条数据
create or replace trigger t_back_clazz
after delete on tb_clazz --触发时序:before,after
referencing myNEX as NEW myOLD as OLD --相关标识符:访问操作完成前/后的值
for each row --行触发器
declare
r_tb_class tb_clazz%rowtype;
begin
--1.获取删除后的数据
r_tb_class.id :=OLD.id,--获取删除后的数据id
r_tb_class.code :=OLD.Code;--获取删除后的数据code
insert into tb_clazz_back(id,code)
values(r_tb_class.id,r_tb_class.code);
--commit 触发器中不需在commit,是跟着触发条件进行的
end t_back_clazz;
--系统触发器举例--登录之后触发,触发类型是固定的,如LOGON
create or replace trigger t_login
after LOGON on DATABASE;
declare
tablename varchar(20);
begin
tablename:=DICTIONARY_OBJ_NAME:
insert into test(name,createtime)
value(tablename,sysdate);
end;
--触发器类型:
1.DML触发器:如insert,delete,update语句对行级或语句级进行触发, 一般是使用行级
2.替代触发器:专门进行视图操作,解决的问题:不能直接对由两个以上的表建立的视图进行操作
3.系统触发器:如DDL或oracle系统的启动与关闭等系统事件。
--DML触发器语法举例:当删除tb_clazz中的数据时,向备份表tb_clazz_back中插入一条数据
create or replace trigger t_back_clazz
after delete on tb_clazz --触发时序:before,after
referencing myNEX as NEW myOLD as OLD --相关标识符:访问操作完成前/后的值
for each row --行触发器
declare
r_tb_class tb_clazz%rowtype;
begin
--1.获取删除后的数据
r_tb_class.id :=OLD.id,--获取删除后的数据id
r_tb_class.code :=OLD.Code;--获取删除后的数据code
insert into tb_clazz_back(id,code)
values(r_tb_class.id,r_tb_class.code);
--commit 触发器中不需在commit,是跟着触发条件进行的
end t_back_clazz;
--系统触发器举例--登录之后触发,触发类型是固定的,如LOGON
create or replace trigger t_login
after LOGON on DATABASE;
declare
tablename varchar(20);
begin
tablename:=DICTIONARY_OBJ_NAME:
insert into test(name,createtime)
value(tablename,sysdate);
end;