Oracle触发器

发布时间 2023-04-13 13:25:16作者: 、子夜

触发器

  • Oracle数据库对象,类似于存储过程和函数;
  • 存储过程和函数需要用户显示调用才可执行;
  • 触发器是由一个事件触发运行,当某个事件发生时会自动隐式的运行,不能被显示调用;
  • 触发器的本质是存储过程
    • 1.触发器执行的条件,即触发事件;
    • 2.执行触发器的时间,即发生事件之前before还是发生事件之后after
    • 3.触发器要做的事情,即触发器被触发以后具体执行的任务(代码块)
  • oracle数据库分为DML触发器,DDL触发器,替代触发器和系统触发器
  • DML触发器
    • 基于dml操作的触发器
      • 行级触发器:dml操作(insert,update,delete),sql语句影响多少行,触发多少次 
        • 关键字:for each row
        • 语法
           --DML触发器语法
          create or replace trigger 用户名.触发器
              before/after delete/insert/update on 表名字
              for each row [when 条件]
          declare
              定义变量
          begin
              pl/sql语句块
          end;
        • 创建行级触发器示例
           create or replace trigger TRG_CX_TEXT_SEQ_0413
            before insert on CX_TEXT_SEQ_0413
            for each row
          declare
            -- local variables here
          begin
            if inserting then
              select seq_cx_text_seq.nextval +100000 into :new.row_id from dual;
            end if;
          end TRG_CX_TEXT_SEQ_0413;
        •  
      • 语句触发器:dml操作(insert,update,delete),不管sql语句影响多少行,触发一次DML触发器
  • DDL触发器
    • 当执行ddl语句时触发,按照作用范围,分为schema trigger 和 database trigger
    • schema trigger 作用在一个用户上
    • databse trigger作用在整个数据库所有用户上
    • 常用的DDL触发器
      • grant 授权
      • revoke 撤销授权
      • create 创建
      • drop 删除
      • alter 修改
      • comment 注释
      • audit 审核
      • rename 重命名
      • 语法
         create or replace trigger 用户名.trigger
            before/after ddl事件 on database/schema
            when 条件
        declare
            定义变量
        begin
            pl/sql块
        end;
  • /--备份表
    CREATE TABLE CX_TEXT_SEQ_0413 AS SELECT * FROM CX_LOGIN_HISTORY
    SELECT * FROM CX_TEXT_SEQ_0413  WHERE ROW_ID = 40 FOR UPDATE
    -- 删除触发器
    DROP TRIGGER TRG_CX_TEXT_SEQ_0413
    --设置触发器失效/生效
    ALTER TRIGGER TRG_CX_TEXT_SEQ_0413 DISABLE/ENABLE
    --删除序列
    DROP SEQUENCE SEQ_CX_TEXT_SEQ
    --删除表
    DROP TABLE CX_TEXT_SEQ_0413