zoukankan      html  css  js  c++  java
  • oracle对象之触发器

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

    1.触发器作用

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

     

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

    语法:

    CREATE  [or REPLACE] TRIGGER  触发器名

       {BEFORE | AFTER}

       {DELETE | INSERT | UPDATE [OF 列名]}

       ON  表名

       [FOR EACH ROW [WHEN(条件) ] ]

    declare

        ……

    begin

       PLSQL
    End 触发器名;
     
     1 范例:插入员工后打印一句话“一个新员工插入成功”
     2  
     3 create or replace trigger testTrigger
     4  
     5   after insert on person
     6  
     7 declare
     8  
     9   -- local variables here
    10  
    11 begin
    12  
    13   dbms_output.put_line('一个员工被插入');
    14  
    15 end testTrigger;
     
     
     1 范例:不能在休息时间插入员工
     2  
     3 create or replace trigger validInsertPerson
     4  
     5   before insert on person
     6  
     7 declare
     8  
     9   weekend varchar2(10);
    10  
    11 begin
    12  
    13   select to_char(sysdate, 'day') into weekend from dual;
    14  
    15   if weekend in ('星期一') then
    16  
    17     raise_application_error(-20001, '不能在非法时间插入员工'); //抛出一个可以接受的异常
    18  
    19   end if;
    20  
    21 end validInsertPerson;

    当执行插入时会报错

     

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

    触发语句
    :old
    :new
    Insert
    所有字段都是空(null)
    将要插入的数据
    Update
    更新以前该行的值
    更新后的值
    delete
    删除以前该行的值
    所有字段都是空(null)
     
     1 范例:判断员工涨工资之后的工资的值一定要大于涨工资之前的工资
     2  
     3 create or replace trigger addsal4p
     4  
     5   before update of sal on myemp
     6  
     7   for each row
     8  
     9 begin
    10  
    11   if :old.sal >= :new.sal then
    12  
    13     raise_application_error(-20002, '涨前的工资不能大于涨后的工资');
    14  
    15   end if;
    16  
    17 end;

    调用

    update myemp t set t.sal = t.sal - 1;

     
  • 相关阅读:
    小达同学软件测试第四讲-执行测试
    小达同学软件测试第四讲-执行测试
    Android Studio一直显示Building“project name”Gradle project info问题详解
    Android Studio一直显示Building“project name”Gradle project info问题详解
    安卓入门基础(九)-对应用结构进行分析
    安卓入门基础(九)-对应用结构进行分析
    深入浅出的排序算法-冒泡排序
    深入浅出的排序算法-冒泡排序
    【程序人生】献给还不知道怎么坚持的你
    【程序人生】献给还不知道怎么坚持的你
  • 原文地址:https://www.cnblogs.com/anzhi/p/7568264.html
Copyright © 2011-2022 走看看