Oracle12C--触发器(五十二)

知识点的梳理:

  • Oracle中的触发器分为DML触发器,instead-of(替代)触发器,DDL触发器,系统触发器和数据库事件触发器;
  • DML 触发器中分为以下两类:
    • 表级触发器:所有更新操作只在之前或之后触发一次;
    • 行级触发器:针对更新的每一行分别进行之前或之后触发;
  • 行级触发器中可以使用":old"取得更新前的数据,使用":new"取得更新后的数据;
  • 复合触发器是在Oracle11G之后增加的新功能,可以进行4个触发事件操作;
  • 如果要对视图进行更新操作,则应该使用替代触发器来完成,在替代触发器中,可以对视图中包含的多个数据表进行更新操作;
  • 当需要对发生的DDL操作进行触发时,可以采用DDL触发器。DDL触发器可以针对一个用户或整个数据库,如果针对数据库级应该具备管理员权限;
  • 每一个触发器只能编写最多32KB 的代码,当程序复杂时,可通过过程或函数进行功能切割;

      

  • 触发器简介
    • 触发器类似于过程和函数;
      • 例:当对某一张表执行更新操作(insert,update,delete)时,都可能引发触发器执行;
    • 触发器依靠事件执行;
    • 采用隐式调用,不能接收参数
  • 基本语法与分类
    • Oracle中的触发器分类:DMLinstead-of(替代),DDL,系统或数据库事件触发器
    • 所有触发器都支持的基本创建语法:

CREATE [OR REPLACE] TRIGGER 触发器名称
[BEFORE | AFTER] --触发时间
[INSTEAD OF]
[INSERT | UPDATE |UPDATE OF 列名称 [,列名称,...]|DELETE] --触发事件
ON [表名称 | 视图 |DATABASE | SCHEMA] --触发对象
[REFERENCING [OLD AS 标记] [NEW AS 标记] [PARENT AS 标记]]
[FOR EACH ROW] --触发频率
[FOLLOWS 触发器名称]
[DISABLE]
[WHEN 触发条件] --触发条件
[DECLARE] --触发操作(程序主体)
[程序声明部分;]
[PRAGMA AUTONOMOUS_TRANSACTION;]
BEGIN
程序代码部分;
END [触发器名称];
/

语法作用:
CREATE [OR REPLACE] TRIGGER 触发器名称:创建一个触发器,设置名称,如果选择了OP REPLACE选项,则表示替换已有的触发器;
[BEFORE | AFTER] :该触发器的触发时间,是在操作之前(BEFORE)还是操作之后(AFTER)触发;

[INSTEAD OF]:替代触发器,对于视图操作所定义的触发器类型;

[INSERT | UPDATE |UPDATE OF 列名称 [,列名称,...]|DELETE]:触发的事件,可以是数据表的增加,修改,删除,或者部分字段的更新;
ON [表名称 | 视图 |DATABASE | SCHEMA] :触发器的触发对象,可以是数据表,视图,数据库,模式(用户);
[REFERENCING [OLD AS 标记] [NEW AS 标记] [PARENT AS 标记]]:对于":old",":new",":parent"这3个标识符定义别名;
[FOR EACH ROW]:定义行级触发,没有此语句就是表级触发器;

[FOLLOWS 触发器名称]:配置多个触发器执行的先后顺序;

[DISABLE]:触发器建立之后默认是启用状态,通过此选项,可将其定义为禁用状态;

[WHEN 触发条件]:当满足指定条件时才执行触发器操作;
[DECLARE]:触发器主体程序声明部分,定义变量或游标;

[PRAGMA AUTONOMOUS_TRANSACTION;]:自治事务声明,编写此语句后会在触发器中启动一个子事务处理,并且可以使用COMMIT提交事务;

BEGIN:程序主体部分;

END:触发器结束标记;

/:完结标记

  • 触发器注意事项
    • 触发器不接受任何参数,且只能是在产生了某一个触发事件之后才会自动调用;
    • 对于一张数据表的触发器,最多只有12个,同一种类型的触发器,只能定义一次;
    • 一个触发器最大为32KB,所以如果需要编写的代码较多,可以通过过程或函数调用来完成;
    • 默认情况下,触发器中不能使用事务处理操作,或采用自治事务进行处理;
    • 在一张数据表中,定义过多的触发器,会造成DML性能下降;
  • 触发器相关权限

CREATE ANY TRIGGER

为任意用户创建触发器的权限

ALTER ANY TRIGGER

修改任意触发器的权限

DROP ANY TRIGGER

删除任意触发器的权限

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值