创建函数时在“int”处或附近发生postgres错误语法错误
问题描述:
我对postgres很新。我得到这个错误时,尝试运行下面的脚本:创建函数时在“int”处或附近发生postgres错误语法错误
CREATE OR REPLACE FUNCTION xyz(text) RETURNS INTEGER AS
'DECLARE result int;
BEGIN
SELECT count(*) into result from tbldealercommissions
WHERE
txtdealercode = $1;
if result < 1 then returns 1;
else returns 2 ;
end if;
END;
'
LANGUAGE sql VOLATILE;
的错误是
ERROR: syntax error at or near "int"
LINE 3: 'DECLARE result int;
不知道是什么导致这个错误。任何帮助表示赞赏。
答
这是不合适的:
LANGUAGE sql
用这个代替:
LANGUAGE plpgsql
你要使用的语法不是纯粹的SQL语言,但过程PL/pgSQL的语言。在PostgreSQL中,你可以安装不同的语言,而PL/pgSQL在这方面只是普通版。这也意味着您可能会收到错误消息,说明未安装此语言。在这种情况下,请使用
CREATE LANGUAGE plpgsql;
将其激活。根据PostgreSQL的版本,您可能需要超级用户权限才能执行此步骤。
玩得开心。
答
您不仅使用错误的语言(如A.H.所述),而且还有returns
关键字,您需要return
。您可能想要使用不同的分隔符来避免遇到函数中字符串文字的问题,$$
很常见。我想你的函数应该看起来更像是这样的:
CREATE OR REPLACE FUNCTION xyz(text) RETURNS INTEGER AS $$
DECLARE result int;
BEGIN
select count(*) into result
from tbldealercommissions
where txtdealercode = $1;
if result < 1 then return 1;
else return 2;
end if;
END;
$$ LANGUAGE plpgsql VOLATILE;
嗨啊,我改变了语言PLPGSQL和得到这个错误:错误:语言“PLPGSQL”不存在 提示:使用CREATE LANGUAGE的语言加载到数据库。 – Shiver
在帖子中添加了一些解释。 –
@Shiver:自PostgreSQL ** 9.0 **以来,[默认安装语言PL/pgSQL](http://www.postgresql.org/docs/9.1/interactive/release-9-0.html)。另外,您可以:'确定地创建或更换语言plpgsql''。 –