【发布时间】:2013-11-06 23:52:30
【问题描述】:
我写了一个简单的 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,...
^
任何人都可以发现/解释导致此错误的原因吗?显然,表架构中存在列名,所以我不明白错误消息。
【问题讨论】:
-
顺便说一句,Postgres 没有“存储过程”,只有“函数”。这似乎是一个迂腐的评论,但关键的区别在于函数只能返回一些东西,而不是像其他一些 DBMS 中的存储过程那样将其作为结果集输出。
-
有趣的是,它似乎在 Postgres 9.2 下按预期工作,如 shown in this SQLFiddle demo,所以无论发生什么都可能被认为是一个错误并在某个时候修复。
标签: postgresql stored-procedures