Oracle-Trigger-1

触发器的简介

触发器类似过程和函数,都具有程序主题部分 (声明段\可执行段\异常处理段),但是与手工调用过程或函数不同的是,所有触发器都是依靠事件执行的, 例如:当对于某一张表执行更新操作 (INSERT, UPDATE, DELETE) 时,都可能引起触发器的执行。同时过程或函数都是显示调用的,所以其是可以接收参数的,但触发器由于采用的是隐式调用 (一触即发某类操作时调用),所以是不能够接收参数的。

在 Oracle 之中触发器主要分为: DML 触发器, INSTEAD-OF (替代) 触发器, DDL 触发器,系统或数据库时间触发器。所有的触发器都可以使用如下的基本语法进行创建。

触发器创建语法

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

触发器说明

在编写触发器过程之中应该注意以下几点:

1、触发器不接受任何的参数,并且只能是在产生了某一触发时间之后才会自动调用;

2、针对于一张数据表的触发器,最多只能有12个;

BEFORE INSERT , BEFORE INSERT FOR EACH ROW , AFTER INSERT , AFTER INSERT FOR EACH ROW ,
BEFORE UPDATE , BEFORE UPDATE FOR EACH ROW , AFTER UPDATE , AFTER UPDATE FOR EACH ROW , 
BEFORE DELETE , BEFORE DELETE FOR EACH ROW , AFTER  DELETE, AFTER DELETE FRO EACH ROW

3、同一种类型触发器,只能够定义一次;

4、一个触发器最大为32K,所以如果要编写的代码较多,可以通过过程或函数调用完成;

5、默认情况下,触发器之中是不能使用事务处理操作,或者采用自治事务进行处理;

6、在一张数据表之中,如果定义过多的触发器,则会造成DML性能的下降;

触发器的管理

查看触发器

所有的数据库对象一定会在数据字典之中进行查询,对于触发器,用户同样可以使用三个数据字典查看信息:

USER_TRIGGERS 、 ALL_TRIGGERS 、 DBA_TRIGGERS

禁用/启用触发器

当触发器创建之后的默认状态为启用,如果要修改触发器的操作状态,可以使用如下的语法操作。

ALTER TRIGGER 触发器名称  [DISABLE | ENABLE];

在修改触发器时提供了两种触发器的操作状态:

ENABLE(有效状态):当触发事件发生时,处于有效状态的数据库触发器将被触发;
DISABLE(无效状态):当触发事件发生时,处于无效状态的数据库触发器TRIGGER将不被触发,相当于触发器不存在。

禁用/启用一张表的全部触发器

ALTER TABLE [SCHEMA.] 表名 [ENABLE |DISABLE] ALL TRIGGERS;

删除触发器

DROP TRIGGER 触发器名称;
Contents
  1. 1. 触发器的简介
    1. 1.1. 触发器创建语法
    2. 1.2. 触发器说明
    3. 1.3. 触发器的管理
      1. 1.3.1. 查看触发器
      2. 1.3.2. 禁用/启用触发器
      3. 1.3.3. 禁用/启用一张表的全部触发器
      4. 1.3.4. 删除触发器
|