【问题标题】:increasing entry number automatically for every insert on the entry table为条目表上的每个插入自动增加条目号
【发布时间】:2011-12-04 14:42:11
【问题描述】:

我尝试使用此代码:

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 很陌生

【问题讨论】:

  • 比需要的更复杂。我认为您只需要在表中添加一个 SERIAL 列。

标签: postgresql


【解决方案1】:

你错过了一个

RETURN NEW;

在最后。

错误

ERROR: record "old" is not assigned yet SQL state: 55000

确实表明此可能不是触发器(OLD 和 NEW 仅在触发器上下文中使用)。您需要定义一个触发器才能使其工作。我建议你阅读docs about trigger functions。

正如 Steve C 的评论所说,确保您不仅仅需要 SERIAL(MySQL 术语中的自动增量)。

【讨论】:

    【解决方案2】:

    除了@DrColossos 已经写的内容..

    OLD 和 NEW 仅在触发器中定义ON UPDATE。在 INSERT 的触发器中,您会收到此错误消息。在 DELETE 触发器中,您只能使用 OLD。

    此外,要使触发器工作,您需要一个触发器函数加上一个触发器。你可能也错过了这一点。从reading the excellent manual here开始。

    但我怀疑你的问题比这更基本。首先,正如@Steve 评论的那样,您可能只是在寻找serial 列或sequence 以及您现有列的默认值。

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 2014-07-25
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      相关资源
      最近更新 更多