zoukankan      html  css  js  c++  java
  • oracle 学习笔记之触发器

    说明
    数据库触发器是一个与表相关联的、存储的PL/SQL程序。

    每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自己主动地运行触发器中定义的语句序列。
    触发器的类型
    语句级触发器:在指定的操作语句操作之前或之后运行一次,无论这条语句影响了多少行 。
    行级触发器(FOR EACH ROW):触发语句作用的每一条记录都被触发。

    在行级触发器中使用old和new伪记录变量, 识别值的状态。

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

    触发器语法:

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

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

    触发语句

    :old

    :new

    Insert

    全部字段都是空(null)

    将要插入的数据

    Update

    更新曾经该行的值

    更新后的值

    delete

    删除曾经该行的值

    全部字段都是空(null)


    案例1:限制非工作时间向数据库插入数 周六 周日 以及工作时间的非8点到18点的时间段是不能够在emp2表中插入数据的!

    create or replace
    trigger myTrigger
    before insert on emp2
    begin
      if to_char(sysdate,'day') in('星期六','星期日') or
      to_number(to_char(sysdate,'hh24')) not between 8 and 18 then
      raise_application_error(-20001,'不能在飞工作时间插入数据');
      end if;
    end;
    


    案例二: 确认数据(检查emp表中sal 的改动值不低于原值)也就是说你仅仅能给员工涨工资儿不能减工资!

    create or replace
    trigger checkSal
    before update of sal on emp2
    for each row 
    declare
    begin
      if :new.sal<:old.sal then
      raise_application_error(-20002,'更新薪水比之前的小。');
      end if;
    end;
    


  • 相关阅读:
    推荐:负采样
    JNDI学习总结(一)——JNDI数据源的配置
    前端性能优化
    java中的引用类型概念
    java中的各种数据类型在内存中存储的方式
    POI导出EXCEL经典实现
    synchronized 与 Lock 的那点事
    黑马程序员_Map<K,V> 映射关系 Map.Entry
    Java ConcurrentModificationException异常问题
    表 (list)
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6868099.html
Copyright © 2011-2022 走看看