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;
    


  • 相关阅读:
    函数
    vue中v-for循环如何将变量带入class的属性名中
    代码规范 前端导航
    2019.8.5 mysql 删除 更新
    2019.8.1
    2019.7.31 Xshell简单学习
    日常使用知识点
    FormData实现文件多次添加累加上传和选择删除
    上传图片
    验证码
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6868099.html
Copyright © 2011-2022 走看看