日期:2014-05-16  浏览次数:21211 次

表 XXX 发生了变化, 触发器/函数不能读它
表 XXX 发生了变化, 触发器/函数不能读它

触发器是before delete;
在删除A表记录时,向B表插入要已删除的数据

测试发现:update用:new没有问题,用:old就会报一样的错误

------解决方案--------------------
楼主说的我很晕啊,
你到底是delete还是update啊?
先说new和old
insert是插入数据,所以只会有new,
delete是删除数据,所以只会有old,
update是更新数据,所以new和old都有

第二个问题,楼主为什么要用update来测试delete呢?
楼主大概是认为update操作是一个先删除,然后再插入的操作吧.
------解决方案--------------------
1.你这报错是因为变异表的问题,触发器尝试读取正在发生改变的表时都会报这个错误。

2.v_LogId 尝试不要取历史表里的最大值+1,建个序列让v_LogId取序列的值,这样就不会出错了。

3.如果你非要取历史表的最大值+1,我只能告诉你这么做是可以实现的,但后果是,当多个用户同时对触发表操作时,后一个用户会等待前一个用户完成后才会执行,也就是本来可以并行操作的表变成了串行操作。如果你的系统是给10人以下的人操作的话,你可以这么干。给多人操作的话,你的系统性能会被拖慢的。