主题:Oracle学习笔记(8) 使用PLSQL编写触发器
DML 触发器:
对表执行Insert、Update、Delete操作时激发
可以用于执行校验、设置初使值、审核改变、甚至禁止某种DML操作
语法:
CREATE OR REPLACE TRIGGER 触发器名称
{AFTER|BEFORE } -- 指定触发时机
{INSERT OR DELETE OR UPDATE} -- 指定触发器事件
ON 表名 --指定所监控的表
{FOR EACH ROW|FOR EACH STATEMENT} -- 指定触发器次数
BEGIN
--代码;
END;
相关概念:
AFTER|BEFORE:在什么事件之前或之后执行
INSERT|DELETE|UPDATE:什么事件
ON 表名:触发器建在什么表上,即监控什么表
FOR EACH ROW:行级触发,示例:delete from t1,删除1000行,则执行1000次(一行一次)
FOR EACH STATEMENT:语句级触发,示例: delete from t1,删除1000行,则执行1次(一句一次)
:new 行变量:保存事件发生时新数据所在行,只有insert事件和update事件才有新数据
:old 行变量:保存事件发生时旧数据所在行,只有delete事件和update事件才有旧数据
示例:指出事件,及事件中的新数据和旧数据
insert into emp(empno,ename) values(51,'job');
分析:只有一行新数据(51,job),对应:new变量。
update emp set ename='oracle' where empno = 51;
分析:旧数据 (51,job) ,对应:old变量。
新数据(51,oracle),对应:new变量。
delete from emp where empno = 51;
分析:只有一行旧数据(51,oracle),对应:old变量。
Sql代码
1.-- 显示触发器
2.select trigger_name,status from user_triggers;
3.-- 禁止触发器
4.alter trigger tr_emp_salary disable;
5.-- 激活触发器
6.alter trigger tr_emp_salary enable;
7.-- 禁止表的所有触发器
8.alter table employee disable all triggers;
9.-- 激活表的所有触发器
10.alter table employee enable all triggers;
11.-- 重新编译触发器
12.--alter table tr_emp_salary compile;
13.-- 删除触发器
14.drop trigger tr_emp_salary;