oracle 触发器 pragma autonomous_transaction

from:http://blog.csdn.net/ruru7989/article/details/30712987一般情况下在触发器中是不能使用DDL语句的,使用自治事务可以实现
可以在触发器中加入:
        pragma autonomous_transaction; 表示自由事务处理。
CREATE OR REPLACE TRIGGER temp_ais
AFTER insert  ON atest
for each row
DECLARE
pragma autonomous_transaction;
BEGIN
  execute immediate ‘DROP TABLE AAA‘;
end;
时间: 2024-08-09 10:44:49

oracle 触发器 pragma autonomous_transaction的相关文章

【database】oracle触发器基础

一.oracle触发器基本语法 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 [

[转][工地][存]Oracle触发器死锁问题解决

摘自http://blog.itpub.net/12932950/viewspace-607691/ 这两天一直在因为系统初期设计原因导致的一个触发器问题.问题如下:有表T,有客户编号.账户编号及地址三个字段(为方便起见以最少字段描述).一个客户编号下可能存在多个账户编号(3个或4个).假设客户编号C0下有A1.A2.A3三个账户编号.        现在对账户编号A1的地址字段进行了更新,要求通过触发器同时更新客户编号C0下的另外两个账户A2和A3的地址字段.通过实际的触发,发现存在着一个非常

(转)oracle触发器使用:after insert 与before insert的简单使用注意

本文转载自:http://blog.csdn.net/kuangfengbuyi/article/details/41446125 创建触发器时,触发器类型为after insert , 在begin中 Select fieldA into v_a from tableA; 执行到此句时,会出错: --弹出错误信息提示 --ORA-04091:表tr_table发生了变化触发器/函数不能读它 --ORA-06512: 在iu_table line 2 --ORA-04088: 触发器iu_tab

oracle:触发器,自治事务 trigger

create or replace trigger TRI_FC83_INSERT before insert ON FC83 FOR EACH ROW declare PRAGMA AUTONOMOUS_TRANSACTION; BEGIN :new.afc212 := '1'; delete from fc83 where afc001 = :new.afc001 and afa031 = :new.afa031 and afc210 = :new.afc210; commit; END T

如何在Oracle触发器中使用查询语句

通常情况下,Oracle数据库禁止在行级触发器或行级触发器所调用的子程序中使用查询语句.但是,面对复杂的业务逻辑,不可避免的要使用查询语句. 当在行级触发器中使用查询语句时,Oracle数据库会抛出ORA-04091异常. Oracle官方文档中对ORA-04091异常的说明如下: ORA-04091: table string.string is mutating, trigger/function may not see it Cause: A trigger (or a user defi

PRAGMA AUTONOMOUS_TRANSACTION

数据库事务是一种单元操作,要么是全部操作都成功,要么全部失败.在Oracle中,一个事务是从执行第一个数据管理语言(DML)语句开始,直到执行一个COMMIT语句,提交保存这个事务,或者执行一个ROLLBACK语句,放弃此次操作结束. 针对这种困境,Oracle提 供了一种便捷的方法,即自治事务.自治事务从当前事务开始,在其自身的语境中执行.它们能独立地被提交或重新运行,而不影响正在运行的事务.正因为这样, 它们成了编写错误日志表格的理想形式.在事务中检测到错误时,您可以在错误日志表格中插入一行

关于自治事务和锁 PRAGMA AUTONOMOUS_TRANSACTION & LOCK

之前遇到的一个问题, 可以稳定重现. Oracle 的 INV 提供了一个接口 inv_lot_api_pub.auto_gen_lot() , 用来自动为 item 产生 lot number, 调用一次这个接口, lot number 就会自动 + 1; 看里头的代码, 是先从 MTL_SYSTEM_ITEMS 这个表里面取出一个字段 start_auto_lot_number, 比方说取出来的数值是1000, 那么就会把 1000 当做当前的 lot number, 接着会调用一个 pro

oracle触发器、序列、任务计划练习一例

今天在闲暇时间练习了一下oracle任务计划,具体详情如下 1.创建表 TBL_TIME create table tbl_time( id number not null,    /*id号*/ vsecond varchar2(2),   /* 秒*/ vtime varchar2(10)    /*当前时间*/ ) 2.创建序列 seq_tbltime create sequence seq_tbltime start with 1 increment by 1 nomaxvalue no

oracle 触发器与事务

(1)如果外部事务撤销,触发器形成的变更是否会撤销?如果触发器操作失败,是否会导致外部SQL失败,从而导致事务撤销(2) 事务回滚时,触发器形成的变更是否会撤销:(3) 触发器失败时,外部SQL是否会返回错误:如果会,则研究如何不返回错,如果不会,则研究如何会返回错误:(4) 触发器失败时(插入两条记录,前者成功,后者失败),事务回滚时触发器形成的变更是否会撤销:(5) 触发器失败时(插入两条记录,前者成功,后者失败),事务提交时触发器形成的变更是否会撤销: 答 在oracle中,对触发器的限制