我尝试使用此代码:
CREATE OR REPLACE FUNCTION eno_inc() RETURNS trigger AS $eno_inc$
BEGIN
NEW.eno := OLD.eno + 1;
END;
$eno_inc$
LANGUAGE plpgsql;
但是无论何时我运行它都会产生以下错误: 错误:记录“旧”尚未分配 详细信息:尚未分配的记录的元组结构是不确定的。 语境:PL / pgSQL函数“eno_inc”第4行分配
*** 错误 ** *
错误:尚未分配记录“旧” SQL状态:55000
P.S我是SQL的新手
答案 0 :(得分:1)
你错过了
RETURN NEW;
最后。
错误
ERROR: record "old" is not assigned yet SQL state: 55000
确实显示此 MIGHT 不是触发器(OLD和NEW仅用于触发器上下文中)。您需要定义一个触发器才能工作。我建议你阅读docs about trigger functions。
正如Steve C的评论所指出的那样,请确保您不仅需要SERIAL(在MySQL术语中自动增加)。
答案 1 :(得分:1)
除了@DrColossos已经写过的内容..
OLD
和 NEW
仅在触发器 ON UPDATE
中定义。在INSERT的触发器中,您将收到此错误消息。在DELETE的触发器中,您只能使用OLD
。
此外,要使触发器工作,您需要触发器功能和触发器。你可能也错过了。从reading the excellent manual here开始。
但我怀疑你的问题比这更基本。首先,正如@Steve评论的那样,您可能只是在为现有的列寻找serial列或sequence和DEFAULT。