oracle触发器

来源:互联网 发布:下载驱狗软件 编辑:程序博客网 时间:2024/05/17 22:29
1. 触发器类型:DML触发器、替代触发器(INSTEAD OF)、系统触发器
2. 触发器触发次序:before(前触发)、after(后触发)
3. FOR EACH ROW选项说明触发器为“行触发器”,当省略FOR EACH ROW 选项时,BEFORE 和AFTER 触发器为“语句触发器”,而INSTEAD OF 触发器则只能为“行触发器”
4. WHEN 子句说明触发约束条件,WHEN 子句指定的触发约束条件只能用在BEFORE 和AFTER 行触发器中,不能用在INSTEAD OF 行触发器和其它类型的触发器中
5. 编写触发器时,需要注意以下几点:
   1. 触发器不接受参数。
   2. 一个表上最多可有12个触发器,但同一时间、同一事件、同一类型的触发器只能有一个。并各触发器之间不能有矛盾。
   3. 在一个表上的触发器越多,对在该表上的DML操作的性能影响就越大。
   4. 触发器最大为32KB。若确实需要,可以先建立过程,然后在触发器中用CALL语句进行调用。
   5. 在触发器的执行部分只能用DML语句(SELECT、INSERT、UPDATE、DELETE),不能使用DDL语句(CREATE、ALTER、DROP)。
   6. 触发器中不能包含事务控制语句(COMMIT,ROLLBACK,SAVEPOINT)。因为触发器是触发语句的一部分,触发语句被提交、回退时,触发器也被提交、回退了。
   7. 在触发器主体中调用的任何过程、函数,都不能使用事务控制语句。
   8. 在触发器主体中不能申明任何Long和blob变量。新值new和旧值old也不能是表中的任何long和blob列。
   9. 不同类型的触发器(如DML触发器、INSTEAD OF触发器、系统触发器)的语法格式和作用有较大区别。
   10. truncate 操作不会触发表上的delete触发器,而delete会正常触发。


6. 创建INSTEAD OF触发器需要注意以下几点:
   1. 只能被创建在视图上,并且该视图没有指定WITH CHECK OPTION选项。
   2. 不能指定BEFORE 或 AFTER选项。
   3. FOR EACH ROW子可是可选的,即INSTEAD OF触发器只能在行级上触发、或只能是行级触发器,没有必要指定。
   4. 没有必要在针对一个表的视图上创建INSTEAD OF触发器,只要创建DML触发器就可以了。 
  

7. 系统事件触发器既可以建立在一个模式上,又可以建立在整个数据库上。当建立在模式(SCHEMA)之上时,只有模式所指定用户的DDL操作和它们所导致的错误才激活触发器, 默认时为当前用户模式。当建立在数据库(DATABASE)之上时,该数据库所有用户的DDL操作和他们所导致的错误,以及数据库的启动和关闭均可激活触发器。要在数据库之上建立触发器时,要求用户具有ADMINISTER DATABASE TRIGGER权限。


数据库:
1. SQL语言包括三种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML)以及数据控制语言(DCL)
2. DDL(Data Manipulation Language)是数据操作语言 :insert、update、delete
   DML(Data Definition Language)是数据库模式定义语言:create database、create table/view、alter table/view、delete table/view、 truncate table
   DCL(Data Control Language)是数据库控制语言,是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句
   DQL(Data Query Language)是数据查询语言:select

0 0