触发器
触发器是一种在发生数据库事件时自动运行的PL/SQL代码块,在一般情况下它与特定表上的DML操作相关联。注意触发器与数据库中其他过程的区别,过程或函数都由用户直接调用,而触发器的执行用户则不能直接调用。Oracle会在相应的事件发生时,自动调用触发器。
语法组成部分:
在前面的触发器例子中,实际包含了4个主要组成部分:
触发器名称:
create or replace trigger incr_trigger
触发条件:
before insert on temp_table for each row
触发器限制:
when (new.id <=200)
触发器主体
begin
end;
CREATE [OR REPLACE] TRIGGER trigger_name
AFTER | BEFORE | INSTEAD OF
[INSERT] [[OR] UPDATE [[OR] DELETE] [OF column_list]]
ON table_or_view_name
[FOR EACH ROW]
[WHEN (condition)]
BEGIN
pl/sql_block;
END;
Oracle具有不同类型的触发器,包括:
DML触发器 :
当对表进行DML操作时触发,可以在DML操作前或操作后进行触发。如在表或视图上的数据操作语句,像 INSERT、UPDATE和DELETE操作;
DDL触发器:
当DDL事件发生时而触发。在对象上的数据定义语句,如CREATE、ALTER和DROP;
替代触发器:
替代触发器是Oracle来用替换所使用的实际语句而执行的触发器。
系统触发器:
系统触发器就是在Oracle数据库系统的事件中进行触发,如Oracle系统的启动与关闭等.
语句级触发器:
如果在创建触发器时未使用 for each row 子句,则该触发器为语句级触发器,该触发器在每个数据修改语句执行 后只调用一次,而不管这一操作将影响到多少行。
行级触发器 :
如果在创建触发器时使用 for each row 子句,则该触发器为行级触发器,当一个DML操作影响数据库中的多行数 据时,对于每个数据行,行级触发器均会被触发一次。
系统事件触发器:
是指由数据库系统事件触发的数据库触发器。数据库系统事件包括如下几种:
数据库的启动(startup)
数据库的关闭(shutdown)
数据库服务器的出错(servererror) 注意:系统事件触发器不是与特定的表或视图关联。