Oracle触发器
Oracle触发器
1、Oracle触发器为自动调用,当定义好触发器后,用户对表再进行操作,就会自动调用触发器。
2、创建触发器格式
- CREATE [OR REPLACE] TRIGGER 触发器名
- {BEFORE|AFTER|INSTEAD OF} 触发事件1 [OR 触发事件2...]
- ON 表名
- [FOR EACH ROW] 行级
- [WHEN 触发条件]
- DECLARE
- 声明部分
- BEGIN
- 主体部分
- END 触发器名;
3、定义触发器需要注意
一个表最多只能有三类触发器,insert,update,delete
每个触发器只能用于一个表
dml触发器不能对视图、临时表创建触发器
truncate table能删除表,但不能触发触发器 dml
不能将触发器用于系统表
不能在触发器里使用 DTL commit rollback;
4、触发器案例
--创建简单触发器(行级别触发器)
- SQL> --创建触发器
- SQL> create or replace trigger stu_triger
- 2 --可以写update、insert、delete
- 3 after update on zr_stu
- 4 --这句表示行级触发器,如果没有那么操作多次表,只执行一次触发器
- 5 for each row
- 6 declare
- 7 name varchar2(30);
- 8 begin
- 9 --:new.stusex 打印新数据,:old.stusex 打印以前数据
- 10 dbms_output.put_line('new:'||:new.stusex||'old:'||:old.stusex);
- 11 --结束的时候,要把触发器的名写在end后
- 12 end stu_triger;
- 13 /
- Trigger created
--使用触发器
- SQL> update zr_stu set stusex='男';
- new:男old:女
- new:男old:女
- new:男old:女
- new:男old:女
- new:男old:女
- 5 rows updated
--创建简单触发器(表级触发器,语句级)
- SQL> --创建触发器
- SQL> create or replace trigger stu_triger2
- 2 --可以写update、insert、delete
- 3 after update on zr_stu
- 4 declare
- 5 name varchar2(30);
- 6 begin
- 7 dbms_output.put_line('跟新操作');
- 8 --结束的时候,要把触发器的名写在end后
- 9 end stu_triger2;
- 10 /
- Trigger created
- SQL> update zr_stu set stuname = '女' where stuid = 5;
- new:男old:男
- 跟新操作
- 1 row updated
--注明zr_stu表结构和数据
- SQL> desc zr_stu;
- Name Type Nullable Default Comments
- ------- ------------ -------- ------- --------
- STUID NUMBER(10)
- STUNAME VARCHAR2(20)
- STUSEX VARCHAR2(2) Y '男'
- SQL> select * from zr_stu;
- STUID STUNAME STUSEX
- ----------- -------------------- ------
- 1 付政委 男
- 2 江风 男
- 3 郝忠军 男
- 4 冯奇缘 男
- 5 女 男
- SQL> rollback;
- 行级触发器,可以监听多条数据的控制
- 表级触发器,可以监听一条语句的控制
- 一个表可以有多个触发器
- 但是一个触发器不能给多个表用
评论暂时关闭