触发器
- 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触发器
- 行级触发器: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