为条目表上的每个插入自动增加条目编号

时间:2011-12-04 14:42:11

标签: postgresql

我尝试使用此代码:

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的新手

2 个答案:

答案 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。