我正在尝试创建一个函数+触发器,以在我的表中名为“ nada”的更新或插入时将“ modif”属性更新为当前日期。
代码运行良好,但所有行均受影响。我只希望更新后的行中的当前日期。
有什么想法吗?
到目前为止,这是我的代码:
CREATE OR REPLACE FUNCTION public.maj_modif()
RETURNS "trigger" AS
$BODY$
BEGIN
NEW.modif:= (SELECT current_date);
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS maj_modif ON public.nada;
CREATE TRIGGER maj_modif BEFORE INSERT OR UPDATE ON public.nada
FOR EACH ROW
EXECUTE PROCEDURE public.maj_modif();
如果我在触发器中尝试不带“ FOR EACH ROW”的相同代码,则会得到以下错误信息:«new»尚未受影响(...)尚未确定注册行的结构。
答案 0 :(得分:1)
我假设您只希望在实际更改任何列时触发触发器。
可以做到
CREATE TRIGGER maj_modif BEFORE UPDATE ON public.nada
FOR EACH ROW
WHEN OLD <> NEW
EXECUTE PROCEDURE public.maj_modif();
这仅适用于UPDATE
,因为未定义INSERT
OLD
。定义没有INSERT
子句的WHEN
触发器。