Oracle触发器


1、Oracle触发器为自动调用,当定义好触发器后,用户对表再进行操作,就会自动调用触发器。

2、创建触发器格式

  1. CREATE [OR REPLACETRIGGER 触发器名   
  2.  {BEFORE|AFTER|INSTEAD OF} 触发事件1 [OR 触发事件2...]   
  3.  ON 表名   
  4.    
  5.  [FOR EACH ROW]   行级    
  6.  [WHEN 触发条件]   
  7.  DECLARE   
  8.           声明部分   
  9.  BEGIN   
  10.          主体部分   
  11.  END   触发器名;  

3、定义触发器需要注意

     一个表最多只能有三类触发器,insert,update,delete
     每个触发器只能用于一个表
     dml触发器不能对视图、临时表创建触发器
     truncate table能删除表,但不能触发触发器  dml
    不能将触发器用于系统表 
    不能在触发器里使用  DTL     commit  rollback;


4、触发器案例

--创建简单触发器(行级别触发器

  1. SQL> --创建触发器   
  2. SQL> create or replace trigger stu_triger  
  3.   2  --可以写update、insert、delete   
  4.   3  after update on zr_stu  
  5.   4  --这句表示行级触发器,如果没有那么操作多次表,只执行一次触发器   
  6.   5  for each row  
  7.   6  declare  
  8.   7  name varchar2(30);  
  9.   8  begin  
  10.   9    --:new.stusex 打印新数据,:old.stusex 打印以前数据   
  11.  10    dbms_output.put_line('new:'||:new.stusex||'old:'||:old.stusex);  
  12.  11    --结束的时候,要把触发器的名写在end后   
  13.  12    end stu_triger;  
  14.  13  /  
  15.    
  16. Trigger created  

--使用触发器

  1. SQL> update zr_stu set stusex='男';  
  2.    
  3. new:男old:女  
  4. new:男old:女  
  5. new:男old:女  
  6. new:男old:女  
  7. new:男old:女  
  8.    
  9. rows updated  

--创建简单触发器(表级触发器,语句级

  1. SQL> --创建触发器   
  2. SQL> create or replace trigger stu_triger2  
  3.   2  --可以写update、insert、delete   
  4.   3  after update on zr_stu  
  5.   4  declare  
  6.   5  name varchar2(30);  
  7.   6  begin  
  8.   7    dbms_output.put_line('跟新操作');  
  9.   8    --结束的时候,要把触发器的名写在end后   
  10.   9    end stu_triger2;  
  11.  10  /  
  12.    
  13. Trigger created  
--使用语句级触发器
  1. SQL> update zr_stu set stuname = '女' where stuid = 5;  
  2.    
  3. new:男old:男  
  4. 跟新操作  
  5.    
  6. 1 row updated  

--注明zr_stu表结构和数据

  1. SQL> desc zr_stu;  
  2. Name    Type         Nullable Default Comments   
  3. ------- ------------ -------- ------- --------    
  4. STUID   NUMBER(10)                               
  5. STUNAME VARCHAR2(20)                             
  6. STUSEX  VARCHAR2(2)  Y        '男'               
  7.    
  8. SQL> select * from zr_stu;  
  9.    
  10.       STUID STUNAME              STUSEX  
  11. ----------- -------------------- ------   
  12.           1 付政委               男  
  13.           2 江风                 男  
  14.           3 郝忠军               男  
  15.           4 冯奇缘               男  
  16.           5 女                   男  
  17.    
  18. SQL> rollback;  
说明
  1. 行级触发器,可以监听多条数据的控制  
  2. 表级触发器,可以监听一条语句的控制  
  3.   
  4. 一个表可以有多个触发器  
  5. 但是一个触发器不能给多个表用  

相关内容