gpt4 book ai didi

postgresql - 错误 : column "xxx" does not exist: Postgresql plpgsql stored procedure

转载 作者:行者123 更新时间:2023-11-29 11:41:42 24 4
gpt4 key购买 nike

我已经编写了一个简单的 PG SP 作为概念验证。但是,我在运行 SP 时收到一条错误消息。这是架构和 SP 的 SQL:

CREATE TABLE foobar
(
forename VARCHAR(255),
surname VARCHAR(32),
enrolement_ts TIMESTAMP,
age SMALLINT,
major VARCHAR(32),
user_id INTEGER
);


CREATE OR REPLACE FUNCTION insert_foobar (
forename VARCHAR(255),
surname VARCHAR(32),
age SMALLINT,
major VARCHAR(32) ) RETURNS VOID AS $$
INSERT INTO foobar VALUES (forename, surname, getdate(), age, major, user_id());
$$ LANGUAGE sql;

当我在命令行输入函数定义时,出现以下错误:

ERROR:  column "forename" does not exist
LINE 6: INSERT INTO foobar VALUES (forename, surname,...
^

任何人都可以发现/解释导致此错误的原因吗?显然,表模式中存在列 forename,所以我不明白错误消息。

最佳答案

在 PostgreSQL 9.2 之前,用纯 SQL(而不是 pl/pgSQL 等过程语言)编写的函数的参数不能通过名称引用命名参数,即使函数签名可以包含它们(“用于文档目的").

current manual page on SQL functions包括这条注释:

Note: The ability to use names to reference SQL function arguments was added in PostgreSQL 9.2. Functions to be used in older servers must use the $n notation.

因此,要使用 9.2 之前的版本,您的函数需要如下所示:

CREATE OR REPLACE FUNCTION insert_foobar (
forename VARCHAR(255),
surname VARCHAR(32),
age SMALLINT,
major VARCHAR(32) ) RETURNS VOID AS $$
INSERT INTO foobar VALUES ($1, $2, getdate(), $3, $4, user_id());
$$ LANGUAGE sql;

(我假设 getdate()user_id() 是本地定义的函数,包裹在 now() 和任何需要的逻辑中用于用户 ID。)

关于postgresql - 错误 : column "xxx" does not exist: Postgresql plpgsql stored procedure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19825340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com