【发布时间】:2020-09-06 11:44:18
【问题描述】:
我想在 PostgreSQL 中创建触发器。
逻辑很简单。
我需要触发器,如果published_at 更新并且written_at 为空,请将published_at 设置为written_at。
我写了这个,但它失败了。有人有想法吗?
CREATE function setWrittenAt() RETURNS trigger;
AS
DECLARE old_id INTEGER;
BEGIN ;
old_id = OLD.id
IF NEW.published_at IS NOT and NEW.written_at IS null
THEN
UPDATE review SET NEW.written_at = NEW.published_at where id = old_id;
END IF ;
RETURN NEW;
END;
LANGUAGE plpgsql;
CREATE TRIGGER update_written_at
AFTER UPDATE OF published_at ON review
WHEN (OLD.published_at IS DISTINCT FROM NEW.published_at)
EXECUTE PROCEDURE setWrittenAt();
错误:
语法错误:7 错误:“DECLARE”处或附近的语法错误 第 3 行:声明 old_id INTEGER;
【问题讨论】:
-
你得到的错误是什么?
-
语法错误:7 错误:“DECLARE”第 3 行或附近的语法错误:DECLARE old_id INTEGER;
-
函数体(从
DECLARE到END)必须是字符串字面量,即用'或$$括起来。
标签: sql postgresql plpgsql database-trigger