【发布时间】:2016-04-22 16:05:00
【问题描述】:
使用以下触发器时出现错误:
create or replace trigger t1
after insert or update
on student_tbl
declare
pragma autonomous_transaction;
begin
if inserting then
insert into stud_fees_details(stud_id,fees_balance,total_fees)
select stud_id,course_fees,course_fees from student_tbl s,courses_tbl c where s.stud_standard_id=c.course_id;
elsif updating('stud_standard_id') then
insert into stud_fees_details(stud_id,fees_balance,total_fees)
select stud_id,course_fees,course_fees from student_tbl s,courses_tbl c where s.stud_standard_id=c.course_id;
end if;
end;
错误是
ORA-06519: 检测到活动的自主事务并回滚 ORA-06512:在“SYSTEM.T1”,第 15 行 ORA-04088: 执行触发器 'SYSTEM.T1' 期间出错
【问题讨论】:
-
删除了
Sql server和Mysql标签,因为错误消息明确指出它是ORACLE -
您是否尝试在搜索引擎上搜索错误消息“检测到并回滚活动的自主事务”?我的第一击似乎以非常详细的方式解释了它。
-
有 oracle Database Error Messages 手册解释了为什么会出现这个错误以及如何避免它。
-
首先在触发器中使用自治事务听起来是个坏主意。您试图解决的真正问题是什么?
-
这似乎是所谓的XY-problem:您引入了自治事务,因为您遇到了另一个问题。现在您询问的是自主事务错误而不是您原来的问题。除此之外,在 SYSTEM 模式中创建对象是一个坏主意。您应该为此创建一个用户/模式。
标签: oracle plsql oracle11g database-trigger