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;

     
  • 相关阅读:
    Path Sum II
    Convert Sorted Array to Binary Search Tree
    Construct Binary Tree from Inorder and Postorder Traversal
    Construct Binary Tree from Preorder and Inorder Traversal
    Maximum Depth of Binary Tree
    Binary Tree Zigzag Level Order Traversal
    Binary Tree Level Order Traversal
    Same Tree
    Validate Binary Search Tree
    Binary Tree Inorder Traversal
  • 原文地址:https://www.cnblogs.com/anzhi/p/7568264.html
Copyright © 2011-2022 走看看