Oracle triggers when updating


12-Mar-2017 06:57

8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2.3 创建替代(INSTEAD OF)触发器 8.2.3 创建系统事件触发器 8.2.4 系统触发器事件属性 8.2.5 使用触发器谓词 8.2.6 重新编译触发器 8.3 删除和使能触发器 8.4 触发器和数据字典 8.5 数据库触发器的应用举例 。所以运行触发器就叫触发或点火(firing)。ORACLE事件指的是对数据库的表进行的INSERT、UPDATE及DELETE操作或对视图进行类似的操作。ORACLE将触发器的功能扩展到了触发ORACLE,如数据库的启动与关闭等。所以触发器常用来完成由数据库的完整性约束难以完成的复杂业务规则的约束,或用来监视对数据库的各种操作,实现审计的功能。 8.1.1 DML触发器 ORACLE可以在DML语句进行触发,可以在DML操作前或操作后进行触发,并且可以对每个行或语句操作上进行触发。 8.1.2 替代触发器 由于在ORACLE里,不能直接对由两个以上的表建立的视图进行操作。所以给出了替代触发器。它就是ORACLE 8专门为进行视图操作的一种处理方法。 8.1.3 系统触发器 ORACLE 8i 提供了第三种类型的触发器叫系统触发器。它可以在ORACLE数据库系统的事件中进行触发,如ORACLE系统的启动与关闭等。 触发器组成: l :说明触发器内定义的动作被执行的次数。即语句级(STATEMENT)触发器和行级(ROW)触发器。 语句级(STATEMENT)触发器:是指当某触发事件发生时,该触发器只执行一次; 行级(ROW)触发器:是指当某触发事件发生时,对受到该操作影响的每一行数据,触发器都单独执行一次。 编写触发器时,需要注意以下几点: l 触发器不接受参数。 l 一个表上最多可有12个触发器,但同一时间、同一事件、同一类型的触发器只能有一个。并各触发器之间不能有矛盾。 l 在一个表上的触发器越多,对在该表上的DML操作的性能影响就越大。 l 触发器最大为32KB。若确实需要,可以先建立过程,然后在触发器中用CALL语句进行调用。 l 语句(SELECT、INSERT、UPDATE、DELETE),不能使用DDL语句(CREATE、ALTER、DROP)。 l 触发器中不能包含事务控制语句(COMMIT,ROLLBACK,SAVEPOINT)。因为触发器是触发语句的一部分,触发语句被提交、回退时,触发器也被提交、回退了。 l 在触发器主体中调用的任何过程、函数,都不能使用事务控制语句。 l 在触发器主体中不能申明任何Long和blob变量。新值new和旧值old也不能是表中的任何long和blob列。 l 不同类型的触发器(如DML触发器、INSTEAD OF触发器、系统触发器)的语法格式和作用有较大区别。 8.2 创建触发器 创建触发器的一般语法是: 。 REFERENCING 子句说明相关名称,在行触发器的PL/SQL块和WHEN 子句中可以使用相关名称参照当前的新、旧列值,默认的相关名称分别为OLD和NEW。触发器的PL/SQL块中应用相关名称时,必须在它们之前加冒号(:),但在WHEN子句中则不能加冒号。 WHEN 子句说明触发约束条件。Condition 为一个逻辑表达时,其中必须包含相关名称,而不能包含查询语句,也不能调用PL/SQL 函数。WHEN 子句指定的触发约束条件只能用在BEFORE 和AFTER 行触发器中,不能用在INSTEAD OF 行触发器和其它类型的触发器中。 当一个基表被修改( INSERT, UPDATE, DELETE)时要执行的存储过程,执行时根据其所依附的基表改动而自动触发,因此与应用程序无关,用数据库触发器可以保证数据的一致性和完整性。 每张表最多可建立12 种类型的触发器,它们是: BEFORE INSERT BEFORE INSERT FOR EACH ROW AFTER INSERT AFTER INSERT FOR EACH ROW BEFORE UPDATE BEFORE UPDATE FOR EACH ROW AFTER UPDATE AFTER UPDATE FOR EACH ROW BEFORE DELETE BEFORE DELETE FOR EACH ROW AFTER DELETE AFTER DELETE FOR EACH ROW 8.2.1 触发器触发次序 1. 对与受语句影响的每一行: l 执行 BEFORE行级触发器 l 执行 DML语句 l 执行 AFTER行级触发器 3.执行 AFTER语句级触发器 8.2.2 创建DML触发器 触发器名与过程名和包的名字不一样,它是单独的名字空间,因而触发器名可以和表或过程有相同的名字,但在一个模式中触发器名不能相同。 DML触发器的限制 l CREATE TRIGGER语句文本的字符长度不能超过32KB; l 触发器体内的SELECT 语句只能为SELECT …Of course, in that case, you'd need to change the trigger to be a row-level one so that you could inspect the :new or :old values.If you are really concerned about the overhead of the select, you can change it to not join against v$sql, and instead just save the SQL_ADDRESS column, then schedule a job with DBMS_JOB to go off and update the sql_text column with a second update statement, thereby offloading the update into another session and not blocking your original update.I am writing from the mobile app, so i can't give you more detailed examples, but if you google for it you'll find many of them.A quick and dirty option if you're working locally, and are only interested in the first thing that's altering the data, is to throw an error in the trigger instead of logging.

oracle triggers when updating-78

Trade pics and sex chat

oracle triggers when updating-82

akatsuki dating sim flash game

You could even try something more specific like: Just write an "after update" trigger and, in this trigger, log the results of "DBMS_UTILITY. The purpose of this function is exactly to give you the complete call stack of al the stored procedures and triggers that have been fired to reach your code.

I trigger permettono agli utenti di specificare vincoli di integrità più complessi dato che un trigger è essenzialmente una procedura PL/SQL (Oracle), ecc.



Solve your Oracle errors quickly and easily with this list of advice from Oracle experts on common error messages.… continue reading »


Read more

The merge statement in oracle 9i. This article introduces the new MERGE SQL command sometimes referred to as "UPSERT". MERGE is a DML command that enables us to.… continue reading »


Read more