oracle-触发器

发布时间 2023-11-15 19:08:33作者: ~技术小白

创建触发器的语法:

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