2012年1月9日 星期一(oracle读书笔记,PL/SQL程序触发器的使用)

来源:互联网 发布:淘宝化妆品开直通车 编辑:程序博客网 时间:2024/05/20 10:21
 

1.       触发器作为特殊的过程与普通过程的差异在于普通过程需要用户显式的调用才能执行,而触发器则是当某些事件发生的时候,oracle会自动执行触发器过程。

2.       引起触发器的事件包括DML语句、DDL语句、数据库系统事件、用户事件。触发条件是由when子句指定一个逻辑表达式。只有当该表达式的值为true时,遇到触发事件才会执行触发器。

3.       需要注意的是:触发器不接受参数,一个表上最多可以有12个触发器,但同一时间、同一事件、同一类型的触发器只能有一个。同时各个触发器之间不能有矛盾。

4.       触发器最大为32KB。如果需要,可以先建立过程,然后可以使用触发器中使用call命令调用。

5.       在DML触发器中只能使用DML语句。Select、insert、delete、update

6.       在系统触发器中只能使用DDL语句(create、alter、drop)

7.       触发器中不能包含事务控制语句(commit、rollback、savepoint)。因为触发器是触发语句的一部分,触发语句被提交或者回退时,触发器也就被提交或者回退了。

8.       在触发器主体中调用的任何过程、函数都不能使用事务控制语句。

9.       在触发器中不能声明任何long和blob变量。新值、旧值也不能指向表中的任何long和blob列

10.   不同类型的触发器(如DML触发器、instead of触发器、系统触发器)的语法格式和作用都有较大区别。

11.   DML触发器的基本要点:

1)       触发时机:指定触发器的触发时间。分为两种:before和after

2)       触发事件:DML操作,可以是单个触发事件,也可以是多个触发事件or逻辑组合。

3)       条件谓词:当触发事件是多个事件的组合时,针对不同的事件进行不同的处理,要求使用条件谓词:inserting、updating、deleting,只有当触发事件为相应的DML语句时,这些条件谓词取值为true

4)       触发对象:是指触发器创建在哪个表或者视图上

5)       触发条件:由when子句指定一个逻辑表达式。取值为true时,执行触发动作。

6)       触发顺序:这个用语言来描述就比较麻烦了,直接上图:

12.   语句级触发器是指执行DML操作时,以语句为单位执行的触发器,语法格式为

13.   行级触发器,当执行DML操作时,以数据行为单位执行的触发器,即每一行都执行一次触发器,语法格式如下:

14.   如果两个表是主子表,子表中存有主表的主键,这时可以通过创建一个行级触发器,来实现修改主表主键之后,自动修改子表存有的主键值,也就是级联更新。

15.   Instead of触发器是定义在复杂视图上的触发器,对于复杂视图,不允许直接执行DML操作。但通过instead of触发器,就可以在其上执行DML操作了。创建instead of触发器需要注意的是:

只能创建在视图上,并且视图没有指定with check option

不能指定before/after选项

必须指定for each row选项

创建instead of触发器的语法格式为:

16.   触发器管理包括:

1)       查询触发器的视图user_triggers,all_triggers,dba_triggers

2)       禁止和激活触发器alter trigger triggername disable/enable

3)       禁止和激活表上所有触发器 alter table tablename disable/enable triggers

4)       重新编译触发器alter trigger triggername compile

删除触发器drop trigger triggername
原创粉丝点击