触发器详细介绍

触发器详细介绍一
      触发器
        是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。
        功能:
        1、 允许/限制对表的修改
        2、 自动生成派生列,比如自增字段
        3、 强制数据一致性
        4、 提供审计和日志记录
        5、 防止无效的事务处理
        6、 启用复杂的业务逻辑
        开始
        create trigger biufer_employees_department_id
               before insert or update
                      of department_id -指定列名
                      on employees -目标表名
               referencing old as old_value -用:old_value.列名代替:old.列名
                               new as new_value -用:new_value.列名代替:new.列名
               for each row
               when (new_value.department_id<>80 ) -条件限定行触发器
        begin
               :new_value.commission_pct :=0;
        end;
        /
        触发器的组成部分:
        1、 触发器名称
        2、 触发语句
        3、 触发器限制
        4、 触发操作
        1、 触发器名称
        create trigger biufer_employees_department_id
        命名习惯:
        biufer(before insert update for each row)
        employees 表名
        department_id 列名
        2、 触发语句
        比如:
        表或视图上的DML语句
        DDL语句
        数据库关闭或启动,startup shutdown 等等
        before insert or update
                      of department_id
                      on employees
               referencing old as old_value
                               new as new_value
               for each row
        说明:
        1、 无论是否规定了department_id ,对employees表进行insert的时候
        2、 对employees表的department_id列进行update的时候
        3、 触发器限制
        when (new_value.department_id<>80 )
        限制不是必须的。此例表示如果列department_id不等于80的时候,触发器就会执行。
        其中的new_value是代表更新之后的值。
        4、 触发操作
        是触发器的主体
        begin
               :new_value.commission_pct :=0;
        end;
        主体很简单,就是将更新后的commission_pct列置为0
        触发:
        insert into employees(employee_id,
        last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct
      )
        values( 12345,’Chen’,’Donny’, sysdate, 12,
      ‘donny@hotmail.com’,60,10000,.25);
        select commission_pct from employees where employee_id=12345;
        触发器不会通知用户,便改变了用户的输入值。
        触发器类型:
        1、 语句触发器
        2、 行触发器
        3、 INSTEAD OF 触发器
        4、 系统条件触发器
        5、 用户事件触发器
      注释:
      before和after:指在事件发生之前或之后激活触发器。
      instead of:如果使用此子句,表示可以执行触发器代码来代替导致触发器调用的事件。
      insert、delete和update:指定构成触发器事件的数据操纵类型,update还可以制定列的列表。
      referencing:指定新行(即将更新)和旧行(更新前)的其他名称,默认为new和old。
      table_or_view_name:指要创建触发器的表或视图的名称。
      for each row:指定是否对受影响的每行都执行触发器,即行级触发器,如果不使用此子句,则为语句级触发器。
      when:限制执行触发器的条件,该条件可以包括新旧数据值得检查。
      declare---end:是一个标准的PL/SQL块。

      Oracle触发器详细介绍二--语句触发器
      1、 语句触发器
        是在表上或者某些情况下的视图上执行的特定语句或者语句组上的触发器。能够与INSERT、UPDATE、DELETE或者组合上进行关联。但是无论使用什么样的组合,各个语句触发器都只会针对指定语句激活一次。比如,无论update多少行,也只会调用一次update语句触发器。

        例子:
        需要对在表上进行DML操作的用户进行安全检查,看是否具有合适的特权。
        Create table foo(a number);
        Create trigger biud_foo
               Before insert or update or delete
                      On foo
     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值