create or replace TRIGGER PR_POZ_ZAM_CENA_TRG AFTER UPDATE ON PR_POZYCJA_ZAMOWIENIA
FOR EACH ROW BEGIN
BEGIN
UPDATE PR_POZYCJA_ZAMOWIENIA
SET PR_POZYCJA_ZAMOWIENIA.cena_za_sztuke = 1.1*PR_PRODUKT.cena
WHERE PR_PRODUKT.id_produktu=:new.id_produktu;
END PR_POZYCJA_ZAMOWIENIA;
这是我的代码,我不知道为什么它是错误的,我想我想我想念:某处或查询不好,但 idk 如何修复它,尝试使用 : 并将 PR_POZYCJA_ZAMOWIENIA.cena_za_sztuke 更改为 new.cena_za_sztuke 但它不起作用
你有两次BEGIN
,你只END
一次。最终END
需要输入触发器的名称,而不是表的名称。(提供名称是可选的,但很有用。
您还正在更新更新所针对的同一触发器; 这将导致触发器再次触发; 这将导致进一步更新; 这将再次触发触发器...
您可以在正在更新的行中分配列值,在本例中为select ... into
:
create or replace TRIGGER PR_POZ_ZAM_CENA_TRG
AFTER UPDATE ON PR_POZYCJA_ZAMOWIENIA
FOR EACH ROW
BEGIN
SELECT 1.1*PR_PRODUKT.cena
IMTO :new.cena_za_sztuke
FROM PR_PRODUKT
WHERE PR_PRODUKT.id_produktu=:new.id_produktu;
END PR_POZ_ZAM_CENA_TRG:
/
如果该计算是恒定的,则在查询表时或通过视图计算它可能比存储和维护该派生值更简单。