触发器总结
Trigger是当特定的SQL DML 语句,如INSERT、UPDATE或者DELETE语句在特定的数据库表上运行时,由数据库自动激活的过程。触发器对于实现表中某个列值得高级变更审计等功能非常有用。
1、 触发器运行的时机
触发器可以在SQL语句运行之前和之后激活。
触发器根据DML语句影响的行数分为行级触发(row-level trigger)和语句级触发(statement-level)。
比如:一条UPDATE语句修改10行数据,同时还有一个行级触发器激活,那么这个行级触发器将运行10次;如果是一个语句级触发器,则是针对整条UPDATE语句而言的,触发器只激活一次
2、 创建触发器
语法如下:
create [orreplace] trigger <trigger_name>
{before|after|insteadof} {insert|update|delete}
on <table_name>
[for eachrow [when (trigger_condition)]]
begin
<body>
end <trigger_name>;
3、 获取触发器相关信息
select * from all_source where type=upper('trigger') andname=upper('<trigger_name>')
同时这条语句根据不同的type和name可以查看不同类型的内容
加upper的原因是库里的数据都是大写的,如果大家有更好的办法请给我留言
4、 禁用和启用触发器
禁用:alter trigger <trigger_name>disable
启用:alter trigger <trigger_name> enable
5、 删除触发器
drop trigger <trigger_name> enable
触发器实例
1、 自增列
create orreplace trigger ec_bookInfo_bef_insert
before insert on ec_bookinfo
for each row
begin
select ec_bookinfo_seq.nextval into :new.bookidfrom dual;
end ec_bookInfo_bef_insert;
2、 记录最后修改时间
create orreplace trigger bef_update_notice
before update of isread on t_notice_send
for each row
begin
--修改发送表 签收时间
:new.receivetime := sysdate;
end aft_update_notify;
3、 两表数据保持一致
create orreplace trigger aft_update_user
after update of device_id on ss_user
for each row
declare
begin
if(:new.device_id<>:old.device_id)
then
update t_gps_sch set device_id =:new.device_id
where device_id=:old.device_id;
update t_gps_sch_set set deviceids=:new.device_id
where deviceids=:old.device_id;
update t_gps_status set device_id=:new.device_id
where device_id=:old.device_id;
end if;
end aft_update_user;
本文详细介绍了数据库触发器的概念,包括触发器的运行时机、创建、获取信息、禁用启用及删除的方法。通过示例展示了如何使用触发器实现自增列、记录最后修改时间和保持两表数据一致的功能。

3万+

被折叠的 条评论
为什么被折叠?



