oracle-触发器
创建触发器的语法:
create [or replace] trigger tri_name
[before | after | instead of] tri_event
on table_name | view_name | user_name | db_name
[referencing [:old] [:new]]
[for each row [when tri_condition]]
begin
plsql_sentences:
end tri_name;
语句触发器
1、创建语句级触发器
语句级触发器,顾名思义,就是针对一条DML语句而引起的触发器执行。在语句级触发器中,不使用for each row子句,也就是说无论数据操作影响多少行,触发器都只会执行一次。
替换触发器
2、创建替换触发器
替换触发器——即instead of 触发器,它的“触发时机” 关键字是instead of,而不是before或after。与其它类型触发器不同是,替换触发器定义在视图上的,而不是定义
在表上。由于视图是由多个基表连接组成的逻辑结构,所以一般不允许用户进行DML操作(如insert、update、delete等操作),这样当用户为视图编写“替换触发器” 后,用户对视图的DML操作实际上就变成了执行触发器中的PL/SQL语句块,这样就可以通过在“替换触发器”中编写适当的代码对构成视图的各个基表进行操作。
3、系统事件触发器
从Oracle 8i开始,Oracle提供的系统触发器可以在DDL或数据库系统上被触发。DDL指的是数据定义语句,如create、alter和drop等。而数据库系统事件包括数据库服务器的启动(STARTUP)或关闭(SHUTDOWN),数据库服务器出错(SERVERERROR)等。
语法格式:
CREATE OR REPLACE TRIGGER trigger_name
[BEFORE | AFTER]
[ddl_event_list | database_event_list]
ON [DATABASE | [schema]]
[when_clause]
tigger_body
例如:
create or replace trigger droped_obj_trigger before drop on schema
begin
insert into droped_objects values(ora_dict_obj_name,ora_dict_obj_type,sysdate);
end;
启用和禁用触发器
Oracle提供了ALTER TRIGGER语句用于启用和禁用触发器,语法格式:
ALTER TRIGGER trigger_name DISABLE | ENABLE;
删除触发器
drop trigger trigger_name
重新定义触发器
重新定义:create or replace trigger trigger_name