/ / Oracle - "Tabuľka zmutuje, spúšť / funkcia sa nemusí zobraziť" chyba pri aktualizácii tabuľky bez spúšťača - sql, oracle, plsql, oracle-apex

Oracle - "tabuľka zmutuje, spúšť / funkcia sa nemusí zobraziť" chyba pri aktualizácii tabuľky bez spúšťača - sql, oracle, plsql, oracle-apex

Mám túto chybu: "ORA-04091: tabuľka FASHIONRETAILER.Payslips je mutant, spúšť / funkcia nemusí vidieť"keď sa pokúšate aktualizovať na tabuľke Payslips, ktorá nemá žiadne spúšťače v ňom.Napriek tomu je moje aktualizačné vyhlásenie:

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));

Na calculate_net_pay(user_id) funkciu a sub-query v kde obmedzenia sú v poriadku.

Spúšťače na Výplatné tabuľka

odpovede:

1 pre odpoveď č. 1

Nemôžete použiť dotaz rovnakom stole aktualizujete funkciu alebo spúšťač - funkcia calculate_net_pay robí len to, pokúsi sa vypočíta čistá mzda pre používateľa dotazovaním tabuľka výplatné pásky, ktoré sa pokúšate aktualizovať.

Skúste namiesto funkcie použiť poddotaz.


0 pre odpoveď č. 2

Vyrieši sa tým problém a urobí sa to, čo chcete?

UPDATE "Payslips"  p
SET "NETPAY" = calculate_net_pay(p.user_id)
WHERE p."Date" = (SELECT MAX(p2."Date")
FROM "Payslips" p2
WHERE p2."USERID" = p."USERID" AND
p2."NETPAY" IS NULL
);

0 pre odpoveď č. 3

Môžete sa pokúsiť použiť pragma autonomous_transaction v sekcii deklarovať svoju funkciu.
Neviem čo calculate_net_pay() fungujú presne. Preto to nemusí byť pre vaše riešenie to najlepšie, ale malo by to fungovať.
Viac informácií o autonómnych transakciách nájdete na stránke tu