日期:2014-05-17  浏览次数:21041 次

一个银行触发器Oracle
我写了一个简单的触发器,在编译的时候没有错.但是在执行的时候出现了错误.
哪位高手可以帮帮我呀?
set   serveroutput   on;
create   or   replace   trigger   over1_trigger
after   update   on   account
for   each   row   when   (new.balance <0)
begin
insert   into   loan(loan_number,branch_name,amount)   values
(:new.account_number,:new.branch_name,-:new.balance);
update   account   set   balance=0   where   account_number=:new.balance;
end   over1_trigger;
/


出现的错误是:
表   BANK.ACCOUNT   发生了变化,触发器/函数不能读
在 "BANK.OVER1_TRIGGER ",   line   4
触发器   'BANK.OVER1_TRIGGER '   执行过程中出错


谢谢!!

------解决方案--------------------
trigger不能操作本表。用自治事务就可以。
------解决方案--------------------
这个是基于自身表的trigger的变异表问题
metalink上解释如下:

对于after 类型的 for each row 级别的triggers,都不允许在 trigger 中访问本trigger所依赖的table,