oracle 触发器问题
发布网友
发布时间:2022-04-20 14:58
我来回答
共2个回答
热心网友
时间:2022-04-08 09:05
提示已经讲得清楚: 表TEST.TB_CLEARING发生了变化, 触发器/函数不能读它.
在使用oracle行级(for earch row设定)触发器时要注意:
1.触发器不可以执行COMMIT、ROLLBACK或SAVEPOINT语句,而且不可以调用执行这些语句之一的函数或过程。
2.触发器不可以声明long或LONG RAW变量。
3.触发器不可以在定义它的表上执行DML操作(行级触发器)
你在该触发器中要读取触发器器所在的表的数据(数据DML操作), 这是不允许的.
你将行级触发改成表级触发, 即去掉for each fow试试. 反正在你的语句中也没有使用到NEW, OLD这两个行级触发器新值, 旧值记录.
另外, 粗看你的代码, 似乎更新没有针对性(没有针对内容有变更的记录对tb_budget进行更新), 这样做效率不高, 应该考虑优化你的更新逻辑和代码.
热心网友
时间:2022-04-08 10:23
第一个update 后 commit试试