我收到此错误:“ ORA-04091: table FASHIONRETAILER.Payslips is mutating, trigger/function may not see it ”在尝试更新Payslips表时,它没有触发器 . 附上屏幕截图,证明桌面上没有触发器 . 以下是我的更新声明:
UPDATE "Payslips"
SET "NETPAY" = calculate_net_pay(user_id)
WHERE "PAYSLIPSID" = (
SELECT "Payslips"."PAYSLIPSID" FROM "Payslips"
WHERE "Payslips"."USERID" = user_id AND "Payslips"."Date" = (
SELECT MAX("Payslips"."Date") FROM "Payslips" WHERE "Payslips"."USERID" = user_id
AND "Payslips"."NETPAY" IS NULL));
calculate_net_pay(user_id)
函数和WHERE约束中的子查询正常工作 .
3 回答
您无法在函数或触发器中查询要更新的同一个表 - 您的函数calculate_net_pay就是这样,它会尝试通过查询您尝试更新的表Payslips来计算用户的净工资 .
尝试使用子查询而不是函数 .
这可以解决问题,做你想做的事吗?
您可以尝试在函数的声明部分中使用
pragma autonomous_transaction
.我没看到
calculate_net_pay()
函数究竟做了什么 . 因此,这可能不是您的案例的最佳解决方案,但它应该工作 .有关自治交易的更多信息,请参阅here