oracle触发器

触发器的门类

触发器效用

1、数据肯定。例如,扩大工资不可以低于原工资。

2、实施复杂的安全性检查。例如,周末取缔更改或新增多少。

3、做审计,跟踪表上所做的数额操作等。例如,操作记录。

4、数据的备份和一道。

语句级触发器

在指定的操作语句操作在此之前或以后执行一回,不管这条语句影响了不怎么行。

制造触发器

  1. CREATE [or REPLACE] TRIGGER 触发器名
  1.   (BEFORE|AFTER)

  2.   (DELETE|INSERT|UPDATE[OF 列名])

  1.   [FOR EACH ROW[WHEN(条件)]]
  1. PLSQL 块

创设一个非工作时间不可能修改数据的触发器。

  1. –得到当前是几点

  2. to_char(sysdate,’hh24′)

  3. –将字符转换为数字

  4. to_number(to_char(sysdate,’hh24′))

  1. –判断非工作时间

  2. not
    (to_number(to_char(sysdate,’hh24′)) between 9 and 17)

  3. –阻止执行

  4. raise_application_error(-20000,’非做事时间禁止修改数据’);

在触发器中梗阻SQL继续执行的措施,抛出一个荒唐。错误号码应该在-20000到-20999之内,否则提醒”错误号参数超出范围”。

  1. create or replace

  2. trigger mytrigger

  3. before insert

  4. on table_001

  5. declare

  6. begin

  7.   if
    not (to_number(to_char(sysdate,’hh24′)) between 9 and 17) then

  1.     raise_application_error(-20000,’非工作时间禁止更新数据’);
  1.   end if;

  2. end;

创办一个日增工资无法低于原工资的触发器。

  1. declare

  2. begin

  3.   if
    新工资 < 原工资 then

  4.     raise_application_error(-20001,’工资无法低于原工资’);

  1.   end if;

  2. end

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

触发语句

:old

:new

insert

所有字段都是空(null)

将要插入的数据

update

更新以前该行的值

更新后的值

delete

删除以前该行的值

所有字段都是空(null)

  1. create or replace trigger checkSal
  1. before update

  2. on table_002

  3. for
    each row

  4. declare

  5. begin

  6.   if
    :new.sal < :old.sal then

  7.     raise_application_error(-20001,’涨工资不可能低于原工资’);

  1.   end if;

  2. end;

  3. /

翻看所有的触发器对象。

  1. select * from user_triggers;

去除触发器。

  1. drop trigger checkSal;  

说明

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

行级触发器(FOR EACH ROW)

触发语句功能的每一条记下都被触发。在行级触发器中使用old和new伪记录变量,识别值的情状。

触发器

相关文章