PLSQL编写触发器

来源:互联网 发布:大恒加密软件多少钱 编辑:程序博客网 时间:2024/06/05 16:27

主题: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; 

0 0