触发器(TRIGGER):是用户定义在关系表上的一类由事件驱动的特殊过程
定义触发器
CREATE TRIGGER <触发器名>
{BEFORE | AFTER} <触发事件> ON <表名>
FOR EACH {ROW | STATEMENT}
[WHEN <触发条件>]
<触发动作体>
1.表拥有者才可在表上创建触发器,且一个表只能创建一定数量触发器
2.同一模式下触发器名唯一,触发器名和表面必须在同一模式下
3.当一表数据变化,激活定义在该表上相应触发器
4.触发事件:INSERT,DELETE,UPDATE,也可为这几个事件组合,如INSERT OR DELETE
UPDATE后可有OF<触发列,...>进一步指明修改哪些列时触发
5.触发器类型:行级触发器(FOR EACH ROW)触发动作遍历全表
语句级触发器(FOR EACH STATEMENT)触发动作只发生一次
6.触发条件:条件为真,触发动作体才执行,如WHEN <触发条件>缺省,触发动作体在触发器激活后立即执行
7.触发动作体:可为匿名PL/SQL过程块,也可为调用以创建存储过程
CREATE TRIGGER Insert_or_Update_Sal /*定义触发器*/
BEFORE INSERT OR UPDATE ON Teacher /*在Teacher表上定义触发事件*/
FOR EACH ROW /*定义一行级触发器*/
AS BEGIN /*定义触发动作体,此处为一PL/SQL过程块*/
IF (new.job = '教授') AND (new.sal < 4000) THEN
new.sal := 4000;
END IF;
END;
激活触发器
删除触发器
DROP TRIGGER <触发器名> ON <表名>
DROP TRIGGER Insert_or_Update_Sal ON Teacher;
-- 创建触发器
create trigger insertTable
on [First]
after insert,update
as
set nocount on
update [Second] set [E]=[E]+1
-- 删除触发器
drop trigger insertTable