Hom*_*lli 3 postgresql stored-procedures
我写了一个简单的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;
Run Code Online (Sandbox Code Playgroud)
当我在命令行输入函数定义时,我收到以下错误:
ERROR: column "forename" does not exist
LINE 6: INSERT INTO foobar VALUES (forename, surname,...
^
Run Code Online (Sandbox Code Playgroud)
任何人都可以发现/解释导致此错误的原因吗?显然,列forename存在于表模式中,因此我不理解错误消息.
在PostgreSQL 9.2之前,用纯SQL编写的函数(而不是诸如pl/pgSQL之类的过程语言)的参数不能通过名称来引用命名参数,即使函数签名可以包含它们("用于文档目的").
注意:PostgreSQL 9.2中添加了使用名称引用SQL函数参数的功能.要在旧服务器中使用的函数必须使用$ n表示法.
因此,要使用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;
Run Code Online (Sandbox Code Playgroud)
(我假设getdate()并且user_id()是本地定义的函数,now()并且用户ID需要任何逻辑.)
| 归档时间: |
|
| 查看次数: |
2588 次 |
| 最近记录: |