zoukankan      html  css  js  c++  java
  • oracle触发器

    触发器:当特定时间出现时,自动执行的代码块。是对数据进行监控的一个对象。

    触发器的使用场景:

     触发器的致命缺陷就是性能低下,不建议大量使用触发器

    触发器的语法:

    CREATE [OR REPLACE] TRIGGER trigger_name
    {BEFORE | AFTER | INSTEAD OF}
    {INSERT |DELETE | UPDATE | [OF 字段[,字段]。。。]}
    [OR {INSERT | DELETE | UPDATE [OF 字段[,字段]。。。]}]
    ON [用户名.]表视图名
    [REFERENCING [NEW AS 新行名称 ] [OLD AS 旧行名称] ]
    [FOR EACH ROW]
    [WHEN (条件)]
    DECLARE
    --声明
    BEGIN
    --sql代码
    EXCEPTION
    --异常处理
    END [trigger_name];


    BEFORE | AFTER --表示在事件之前还是之后激活触发器
    INSTEAD OF --如果使用此自句,表示可以由触发器代码来替代激活触发器的事件
    INSERT |DELETE | UPDATE | [OF 字段[,字段]。。。]
    --表示指定构成触发器事件的操作类型,update还可以指定列的列表
    REFERENCING --指定新行(更新后)的别名,旧行(更新后)的别称,默认为new 和 old
    ON [用户名.]表名 --要创建触发器的表或者视图的名称。
    FOR EACH ROW --指定是否对受影响的每个行都执行触发器,即行级触发器,
    --不使用此句子表示语句级触发器
    WHEN (条件) --限制执行触发器的条件

     ------------------------------------示例一,创建触发器(行级)--------------------   

    如果职位不是部门经理,就把新增或者更改的员工的经理指定为员工id为2的经理

    (如果要通过触发器在插入行中设置新值,必须使用 before instead 访问新值,否则不允许设置新值。如示例)

    CREATE OR REPLACE TRIGGER trig_emp
    BEFORE INSERT OR UPDATE OF position
    ON employees
    FOR EACH ROW
    WHEN (new.position<>5)
      BEGIN
        :new.manager_id := 2;
        END trig_emp;

    触发器分为三个部分:触发器语句,触发器限制,触发器操作

         触发器语句:是那些所有可以导致触发器的事件。即在表或者视图上执行dml语句,在模式对象上执行的ddl语句或者数据库事件。

         触发器限制:触发器限制条件包含一个布尔表达式,,该值为真时才能激活触发器。

         触发器操作:是触发器的主体,,包含一些sql语句和代码,在触发器限制条件为真时运行。行级触发器允许触发操作中的语句访问行的列值。

    触发器的类型:

         行级触发器,语句触发器 (合称为dml触发器)

                语句触发器是指一个dml语句触发一个操作。oracle主要掌握

         instead of 触发器 , 模式触发器 , 数据库触发器

                instead of 触发器主要是在视图上定义的触发器。

                模式触发器   也就是用户事务触发器。

                数据库触发器 是指创建在数据库事件上的触发器

          行级触发器:对dml语句影响的每一行执行一次。

    --------------示例二,行级触发器和使用序列自动生成id----

     先创建序列xulei

    CREATE OR REPLACE TRIGGER trig_new_test
    BEFORE  INSERT ON new_test
    FOR EACH ROW
      BEGIN 
        SELECT xulei INTO :new.id FOR dual;
        END trig_new_test;
  • 相关阅读:
    Linux命令备忘录: jobs 显示Linux中的任务列表及任务状态命令
    解决软件启动报error while loading shared libraries: libgd.so.2: cannot open shared object错误
    SSH远程登录和端口转发详解
    《PHP内核探索系列文章》系列分享专栏
    如何防止网页被植入广告,内容被监控-HTTPS
    深入分析PHP优化及注意事项
    php模拟登陆的两种实现方法分析
    PHP中实现MySQL嵌套事务的两种解决方案
    php+Mysqli利用事务处理转账问题实例
    Yaf零基础学习总结5-Yaf类的自动加载
  • 原文地址:https://www.cnblogs.com/hjiongjiong/p/4232226.html
Copyright © 2011-2022 走看看