【发布时间】:2019-01-03 12:18:51
【问题描述】:
我正在尝试实现一个BEFORE 触发器,如果另一个字段被更新,它会将一个字段更新为当前日期。即使更新后的值被分配给NEW.zuletzt,每当我调用Select * from hoert 时,我仍然会看到旧的zuletzt 值。下面是触发函数:
CREATE OR REPLACE FUNCTION changedAnzhoert() RETURNS TRIGGER AS $$
DECLARE
currDate DATE:=CURRENT_DATE;
BEGIN
IF OLD.anzahl<NEW.anzahl THEN
NEW.zuletzt:=currDate;
raise notice 'Neues Datum: %', NEW.zuletzt;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
还有触发器:
CREATE TRIGGER trhoertChange BEFORE UPDATE ON hoert
FOR EACH ROW EXECUTE PROCEDURE changedAnzhoert();
当我跑步时:
UPDATE hoert SET anzahl=anzahl+1 WHERE id=1;
我明白了:
通知:新基准:2019-01-03
更新 1
【问题讨论】:
-
请向我们展示您使用的 UPDATE 语句。
-
UPDATE hoert SET anzahl=anzahl+1 WHERE id=1 NOTICE: Neues Datum: 2019-01-03 UPDATE 1
-
也许你没有提交更新?
-
嗯,很奇怪,我确实将它作为与 BEGIN 的交易进行了尝试;更新;犯罪; , 表中仍然没有变化(除了 anzahl=anzahl+1)
-
在psql中执行
\d hoert并检查触发器是否是唯一的。
标签: sql postgresql plpgsql database-trigger