在简单触发器中预期以下情况之一时遇到符号"end-of-file"


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:
/

如果该计算是恒定的,则在查询表时或通过视图计算它可能比存储和维护该派生值更简单。

相关内容

最新更新