oracle 触发器

数据库触发器是一个与表相关联的、存储的PL/SQL程序。每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自动地执行触发器中定义的语句序列。


触发器可用于
  数据确认 
  实施复杂的安全性检查
  做审计,跟踪表上所做的数据操作等
  数据的备份和同步

触发器的类型
  语句级触发器
    在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行 。
  行级触发器(FOR EACH ROW)
    触发语句作用的每一条记录都被触发。在行级触发器中使用old和new伪记录变量, 识别值的状态。

语法:

CREATE  [or REPLACE] TRIGGER  触发器名
   {BEFORE | AFTER}
   {DELETE | INSERT | UPDATE [OF 列名]}
   ON  表名
   [FOR EACH ROW [WHEN(条件) ] ]
   PLSQL 块
    [FOR EACH ROW [WHEN(条件) ] ]-----行级触发器


触发语句与伪记录变量的值

 1 --不能在非工作时间插入数据
 2 create or replace trigger SecrityEmp
 3 before insert
 4 on testemp
 5 begin
 6   if to_char(sysdate,'day') in ('星期六','星期天')
 7   or to_number(to_char(sysdate,'hh24')) not between 9 and 18 
 8   then
 9   raise_application_error(-20000,'不能在非工作时间插入数据');    
10   end if;
11 end;
12 
13 --涨后工资不能小于涨前工资
14 create or replace trigger checksal
15 before update
16 on testemp
17 for each row
18 begin
19   if :old.sal>:new.sal then
20   raise_application_error(-20001,'涨工资不能小于之前的工资');
21   end if;
22 end;

 

posted @ 2014-12-29 22:13  liuwt365  阅读(262)  评论(0编辑  收藏  举报