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.
odpovede:
1 pre odpoveď č. 1Nemôž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