postgresql – Postgres触发器功能

postgresql – Postgres触发器功能,第1张

概述我在Postgres触发器中需要帮助. 我有两列的表: sold boolean;id_shop int; 它存储物品是否被出售,或者它所在的商店. 我需要一个触发器,如果​​我将“sold”更改为true,那么它也会将id_shop更改为NULL(如果出售则不能在商店中…) 我尝试了不同的方法,但它不起作用或在更新cmd时出错… create or replace function pardo 我在Postgres触发器中需要帮助.

我有两列的表:

sold boolean;ID_shop int;

它存储物品是否被出售,或者它所在的商店.

我需要一个触发器,如果​​我将“sold”更改为true,那么它也会将ID_shop更改为NulL(如果出售则不能在商店中…)

我尝试了不同的方法,但它不起作用或在更新cmd时出错…

create or replace function pardota_masina_veikals() RETURNS trigger AS $pardota_masina$begin  IF NEW.sold=true THEN    update masinas      SET ID_shop=null WHERE ID=NEW.ID;  END IF;  RETURN NEW;END;$pardota_masina$LANGUAGE plpgsql;CREATE TRIGGER pardota_masina_nevar_but_veikala     AFTER INSERT OR UPDATE ON masinas FOR EACH ROW EXECUTE PROCEDURE pardota_masina_veikals();
首先,如果要更改正在更新(或插入)的行的值,则需要一个before触发器

其次,您不需要“更新”表,只需将新值分配给NEW行:

create or replace function pardota_masina_veikals() RETURNS trigger AS $pardota_masina$begin  IF NEW.sold=true THEN    NEW.ID_shop = NulL; END IF;RETURN NEW;END;$pardota_masina$LANGUAGE plpgsql;CREATE TRIGGER pardota_masina_nevar_but_veikala    BEFORE INSERT OR UPDATE ON masinas    FOR EACH ROW EXECUTE PROCEDURE pardota_masina_veikals();
总结

以上是内存溢出为你收集整理的postgresql – Postgres触发器功能全部内容,希望文章能够帮你解决postgresql – Postgres触发器功能所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/sjk/1166605.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存