执行触发器失败 :-6519:ORA-06519: 检测到活动的自治事务处理, 已经回退
2008-12-31 14:33
435 查看
create or replace trigger tig_tt
after update on tt
for each row
declare
rstr varchar2(1024);
PRAGMA AUTONOMOUS_TRANSACTION;
begin
INSERT INTO TT
(ID, text)
values
(100, 'def_失败:' || tO_CHAR(sysdate, 'yyyy-mm-dd hh24:mi:ss'));
exception
when others then
rstr := '执行触发器失败 :' || sqlcode || ':' || sqlerrm;
dbms_output.put_line(rstr);
insert into tt (id, text) values (200, rstr);
end tig_tt;
SQL> update tt set id=3;
执行触发器失败 :-6519:ORA-06519: 检测到活动的自治事务处理, 已经回退
update tt set id=3
ORA-04091: 表 LANDUSER.TT 发生了变化, 触发器/函数不能读它
ORA-06512: 在 "LANDUSER.TIG_TT", line 14
ORA-06519: 检测到活动的自治事务处理, 已经回退
ORA-04088: 触发器 'LANDUSER.TIG_TT' 执行过程中出错
问题:自治事务处理没有提交commit
修改如下:
create or replace trigger tig_tt
after update on tt
for each row
declare
rstr varchar2(1024);
PRAGMA AUTONOMOUS_TRANSACTION;
begin
INSERT INTO TT
(ID, text)
values
(100, 'def_失败:' || tO_CHAR(sysdate, 'yyyy-mm-dd hh24:mi:ss'));
commit;
exception
when others then
rstr := '执行触发器失败 :' || sqlcode || ':' || sqlerrm;
dbms_output.put_line(rstr);
insert into tt (id, text) values (200, rstr);
commit;
end tig_tt;
就没有错误了
after update on tt
for each row
declare
rstr varchar2(1024);
PRAGMA AUTONOMOUS_TRANSACTION;
begin
INSERT INTO TT
(ID, text)
values
(100, 'def_失败:' || tO_CHAR(sysdate, 'yyyy-mm-dd hh24:mi:ss'));
exception
when others then
rstr := '执行触发器失败 :' || sqlcode || ':' || sqlerrm;
dbms_output.put_line(rstr);
insert into tt (id, text) values (200, rstr);
end tig_tt;
SQL> update tt set id=3;
执行触发器失败 :-6519:ORA-06519: 检测到活动的自治事务处理, 已经回退
update tt set id=3
ORA-04091: 表 LANDUSER.TT 发生了变化, 触发器/函数不能读它
ORA-06512: 在 "LANDUSER.TIG_TT", line 14
ORA-06519: 检测到活动的自治事务处理, 已经回退
ORA-04088: 触发器 'LANDUSER.TIG_TT' 执行过程中出错
问题:自治事务处理没有提交commit
修改如下:
create or replace trigger tig_tt
after update on tt
for each row
declare
rstr varchar2(1024);
PRAGMA AUTONOMOUS_TRANSACTION;
begin
INSERT INTO TT
(ID, text)
values
(100, 'def_失败:' || tO_CHAR(sysdate, 'yyyy-mm-dd hh24:mi:ss'));
commit;
exception
when others then
rstr := '执行触发器失败 :' || sqlcode || ':' || sqlerrm;
dbms_output.put_line(rstr);
insert into tt (id, text) values (200, rstr);
commit;
end tig_tt;
就没有错误了
相关文章推荐
- ORA-06519: 检测到活动的自治事务处理,已经回退
- ORA-06519: 检测到活动的自治事务处理,已经回退
- ORA-06519: 检测到活动的独立的事务处理, 已经回退
- 解决触发器检测到活动的独立的事务处理, 已经回退、表发生了变化, 触发器/函数不能读它
- 检测到活动的独立的事务处理 已经回退
- ORA-14450: 试图访问已经在使用的事务处理临时表
- ORA-02046: 分布式事务处理已经开始解决方案
- C#.NET执行Oracle DBLink关于“ORA-02041: 客户数据库未开始一个事务处理”
- 解决ORA-14450:试图访问已经在使用的事务处理临时表
- ORACLE DML LOCK时找出对应SESSION正在执行的SQL语句(ORA-12841,无法变更事务处理中的会话并行 DML 状态)
- 关于自治事务解决触发器导致"ORA-04091:触发器/函数不能读它"不可行的验证
- ORA-14450: 试图访问已经在使用的事务处理临时表
- 通过在触发器中建立自治事务解决ORA-04091(不能读取被触发的表)
- 【转】解决ORA-14450: 试图访问已经在使用的事务处理临时表
- 通过自治事务解决ORA-14551: 无法在查询中执行 DML 操作
- ORA-14450: 试图访问已经在使用的事务处理临时表,根据网上文章提供的方法,问题是解决了
- Oracle 11g ORA-14450: 试图访问已经在使用的事务处理临时表
- ORA-02046: ORA-02046:分布式事务处理已经开始
- Oracle 通过触发器 来创建 同步临时表 及处理 通过 自治事务 来解决 查询 基表的问题
- ORA-02046: 分布式事务处理已经开始解决方案