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;
    


  • 相关阅读:
    Django~学习计划
    在路上---学习篇(一)Python 数据结构和算法 (1)
    面向对象设计原则—单一、开闭、里氏替换原则
    flex布局实现elment容器布局
    js 面向对象的三大特性
    Http状态码大全(200、404、500等)
    HTTP常见状态码 200 301 302 404 500
    Android编程中,sp和px和dp有什么区别
    Android xml资源文件中@、@android:type、@*、?、@+含义和区别
    Android虚拟键盘上下左右键按下和弹起的响应事件
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6868099.html
Copyright © 2011-2022 走看看