创建函数时在“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的版本,您可能需要超级用户权限才能执行此步骤。

玩得开心。

+0

嗨啊,我改变了语言PLPGSQL和得到这个错误:错误:语言“PLPGSQL”不存在 提示:使用CREATE LANGUAGE的语言加载到数据库。 – Shiver

+0

在帖子中添加了一些解释。 –

+1

@Shiver:自PostgreSQL ** 9.0 **以来,[默认安装语言PL/pgSQL](http://www.postgresql.org/docs/9.1/interactive/release-9-0.html)。另外,您可以:'确定地创建或更换语言plpgsql''。 –

您不仅使用错误的语言(如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;