如何使用同一个表中另一个字段的数据自动填充一个字段?

问题描述 投票:0回答:1

我在 Postgres 17 数据库中有一个表:

CREATE TABLE customerdevices (
  "deviceID" serial PRIMARY KEY
, "barcode"  varchar(50)
-- more columns
);

barcode
将是 Code128 条形码的文本表示形式。

本质上,我正在尝试执行以下操作:

创建新行时,我希望通过将自动生成的

barcode
与特定于表的前缀连接起来来自动填充
deviceID
。 (我有几个不同的表想要实现此功能)。

我的方法是创建一个触发函数并为此触发:

CREATE OR REPLACE FUNCTION generate_barcode(pref VARCHAR, id INTEGER)
RETURNS TRIGGER
LANGUAGE plpgsql
CALLED ON NULL INPUT
AS $$
BEGIN
   NEW.barcode := pref || id;
   RETURN NEW;
END;
$$;

CREATE TRIGGER autoGenerateCustomerDeviceBarcode
BEFORE INSERT ON customerdevices
FOR EACH ROW
EXECUTE FUNCTION
    generate_barcode('C', NEW.deviceID);

但是,当我运行脚本时,它输出一个错误:

“$$ BEGIN”处或附近的未终止的美元引号字符串

我尝试了该函数的多次迭代,但总是得到相同的错误。我对 Postgres 相当陌生,对 SQLite 和 Oracle 更熟悉。

我将我的代码通过 Chat-GPT 并根据其建议我:

  1. 验证 plpgsql 已安装并在数据库中启用
  2. 已验证我已连接到正确的数据库
  3. 手动将文件的行结尾从 CRLF 更改为 LF,因为根据 Chat-GPT “CRLF 行结尾的存在有时会导致 PostgreSQL 中出现问题,特别是在以不同方式解释行结尾的环境中执行时(例如,Windows 与 Linux) )”。 4.验证我已经安装了最新版本的Postgresq

尽管如此,在完成所有这些操作后,我仍然遇到同样的错误。此时,我认为创建一个条形码表并将不同表中的所有条形码合并在一起可能会更容易,但如果确实有一种方法可以这样做,我会更喜欢它。

sql postgresql function triggers
1个回答
0
投票

触发器功能不是这样工作的。 说明书:

使用

CREATE FUNCTION
命令创建触发器函数,将其声明为函数 不带参数,返回类型为
trigger
(用于数据更改触发器)

我的粗体强调。

© www.soinside.com 2019 - 2024. All rights reserved.