【数据库摘要】13_Sql_触发器
2014-05-26 10:37
225 查看
SQL 触发器
触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行。即触发器是当某个事件发生时自动地隐式运行。并且,触发器不能接收参数。所以运行触发器就叫触发或点火(firing)。ORACLE事件指的是对数据库的表进行的INSERT、UPDATE及DELETE操作或对视图进行类似的操作。ORACLE将触发器的功能扩展到了触发ORACLE,如数据库的启动与关闭等。所以触发器常用来完成由数据库的完整性约束难以完成的复杂业务规则的约束,或用来监视对数据库的各种操作,实现审计的功能。
注意事项:
触发器不接受参数。一个表上最多可有12个触发器,但同一时间、同一事件、同一类型的触发器只能有一个。并各触发器之间不能有矛盾。
在一个表上的触发器越多,对在该表上的DML操作的性能影响就越大。
触发器最大为32KB。若确实需要,可以先建立过程,然后在触发器中用CALL语句进行调用。
在触发器的执行部分只能用DML语句(SELECT、INSERT、UPDATE、DELETE),不能使用DDL语句(CREATE、ALTER、DROP)。
触发器中不能包含事务控制语句(COMMIT,ROLLBACK,S***EPOINT)。因为触发器是触发语句的一部分,触发语句被提交、回退时,触发器也被提交、回退了。
在触发器主体中调用的任何过程、函数,都不能使用事务控制语句。
在触发器主体中不能申明任何Long和blob变量。新值new和旧值old也不能向表中的任何long和blob列。
不同类型的触发器(如DML触发器、INSTEAD OF触发器、系统触发器)的语法格式和作用有较大区别。
创建触发器的一般语法
CREATE [OR REPLACE] TRIGGER trigger_name {BEFORE | AFTER } {INSERT | DELETE | UPDATE [OF column [, column …]]} [OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...] ON [schema.]table_name | [schema.]view_name [REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}] [FOR EACH ROW ] [WHEN condition] PL/SQL_BLOCK | CALL procedure_name;
问题:当触发器被触发时,要使用被插入、更新或删除的记录中的列值,有时要使用操作前、 后列的值.
:NEW 修饰符访问操作完成后列的值 :OLD 修饰符访问操作完成前列的值
示例
建立一个触发器, 当职工表 emp 表被删除一条记录时,把被删除记录写到职工表删除日志表中去CREATE OR REPLACE TRIGGER tr_del_emp BEFORE DELETE --指定触发时机为删除操作前触发 ON scott.emp FOR EACH ROW --说明创建的是行级触发器 BEGIN --将修改前数据插入到日志记录表 del_emp ,以供监督使用。 INSERT INTO emp_his(deptno , empno, ename , job ,mgr , sal , comm , hiredate ) VALUES( :old.deptno, :old.empno, :old.ename , :old.job,:old.mgr, :old.sal, :old.comm, :old.hiredate ); END;
相关文章推荐
- 使用T-sql 触发器限制数据库中列中非null行值得唯一性
- SQL--数据库触发器
- Oracle数据库编程:使用PL/SQL编写触发器
- 【数据库摘要】1_SQL_Base
- [SDK2.2]SQL Azure (13) Azure的两种关系型数据库服务:SQL Azure与SQL Server VM的不同
- 得到一个数据库的触发器的sql
- 【数据库摘要】5_Sql_IN
- SQL Server查询数据库所有存储过程、触发器、索引信息SQL分享
- SQL--数据库触发器
- 【数据库摘要】3_Sql_Select_Top
- 一条SQL语句查询数据库中的所有表、存储过程、触发器 (sysobjects表信息)
- 一条SQL语句查询数据库中的所有表、存储过程、触发器
- 一条SQL语句查询数据库中的所有表、存储过程、触发器 (sysobjects表信息)
- SQL Server查询数据库所有存储过程、触发器、索引信息SQL分享
- sql得到一个数据库中的触发器的信息
- SQL-SERVER数据库中的游标、存储过程和触发器
- 创建数据库、表、主外键、各种约束、存储过程、视图、索引、事务使用、触发器、创建登录账号、数据库用户 Sql语句示例
- 数据库->SQL Server2005->第4季SQL从入门到提高->13练习1
- 监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1)
- 【数据库摘要】4_Sql_Like