运用触发器完成增删改查业务需求

时间:2024-03-16 09:34:36

>>>>行级触发器

>>>>语句级触发器

一、为什么要用触发器

跟踪并记录所有对雇员表的表结构进行改变的操作,如添加一列,修改列的类型、删除表等DDL操作,

运用触发器完成增删改查业务需求

要将这些操作存储到一个审计表中,以备以后查询。

1、分析:只要一变动表结构就要记录所有操作到一个审计表中。

2、触发器能够满足需求:

①不需要显式调用来执行,而是由一个事件来启动运行,即当某个事件发生时自动地隐式运行。例如,修改表结构操作隐式调用插入审计表的操作。

②触发器不能接收参数,所以可以通过其他Oracle事件来触发调用。

上述Oracle事件包括一下几种情况:

a、对数据库的表进行的insert,update,delete操作或对视图进行类似的操作。

b、执行DDL操作。

c、数据库的启动与关闭。

二、触发器的语法

CREATE [ OR REPLACE ] TRIGGER trigger_name

{ BEFORE / AFTER /INSTEAD OF }

{ INSERT / DELETE / UPDATE [ OF column1,column2..... ]  }

[ OR { INSERT / DELETE / UPDATE [ OF column1,column2..... ]  } ]

ON [ schema. ] table_or_view_name

[ REFERENCING [ NEW AS new_row_name ] [ OLD AS old_row_name ]  ]

[ FOR EACH  ROW ]

[ WHEN ( condition ) ]

[ DECLARE

    variable_declation ]

BEGIN 

    statements;

[ EXCEPTION

    exception_handlers ]

END [ trigger_name ]

语法里面:

>>  BEFORE和AFTER:在事件发生之前或之后**触发器。

>>  INSTEAD OF:如果使用此子句,表示可以执行触发器代码来代替导致触发器调用的事件。 

>>  INSERT / DELETE / UPDATE 指定构成触发器事件的数据操纵类型,UPDATE还可以指定列的列表。

>>  REFERENCING:指定新行(即将更新)和旧行(更新前)的其他名称,默认为 NEW 和 OLD 。

>>  table_or_view_name:要创建触发器的表或视图的名称。

>>  FOR EACH ROW:指定是否对受影响的每行都执行触发器,即行级触发器,如果不使用此子句,则为语句级触发器

>>  WHEN :限制执行触发器的条件,该条件可以包括新旧数据值的检查。

>>  DECLARE```END:一个标准的PL / SQL块。

实例:建立一个触发器,当scott.emp被删除一条记录时,把被删除记录写到删除日志里面去。

1、触发器语句

触发器语句是那些可以导致触发器的事件,即在表或视图上执行的 insert,delete,update之类的DML语句,在模式对象上执行的DDL语句或数据库事件。

在上面的实例中,下面的代码构成了触发器语句。

BEFORE DELETE

ON EMP

FOR EACH ROW

......

这说明,触发器会在这些事件之前隐式执行:当对emp表执行DELETE语句时,触发器将在受到影响的每一行上执行一次。

但是,触发器是否真正执行还要检查触发器限制条件,只有满足限制条件才会执行。

2、触发器限制

运用触发器完成增删改查业务需求

3、触发器操作

运用触发器完成增删改查业务需求

三、触发器的类型

(1)行级触发器

运用触发器完成增删改查业务需求(2)语句级触发器

运用触发器完成增删改查业务需求

四、触发器的管理

(1)触发器的状态

运用触发器完成增删改查业务需求

(2)删除触发器

DROP TRIGGER 触发器名;

(3)触发器的选择

运用触发器完成增删改查业务需求

(4)DML触发器基本要点

运用触发器完成增删改查业务需求

(5)DML触发器的限制

运用触发器完成增删改查业务需求