一个银行触发器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,