我有一个与视图上的触发器连接的功能。视图与" my_table"相关联和其他表。我想通过该功能更新该表。我有4个字段。但是,如果我只更新一个字段,例如contact_name,那该怎么办?如何将该字段放在SET语句而不是4个字段中,如下例所示:
CREATE OR REPLACE FUNCTION my_function()
RETURNS TRIGGER
LANGUAGE plpgsql
AS $function$
BEGIN
UPDATE my_table
SET
identifier = NEW.identifier,
contact_name = NEW.contact_name,
contact_phone_number = NEW.contact_phone_number,
repair_date = NEW.repair_date,
WHERE id=OLD.id;
RETURN NEW;
END
答案 0 :(得分:1)
您需要使用动态SQL。但没关系。如果更新表,则所有 1 的字段都会被数据库复制到新行,即使您没有明确指定它们。
因此,除非您也可以在其他地方单独更新这些字段,并且不想覆盖它们的新值,只需将它们全部设置即可,不要担心它。
1 嗯,除了在TOAST表中存储的未更改字段