创建函数时,在“int”或其附近的postgres错误语法错误

时间:2011-10-06 12:07:31

标签: postgresql

我是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;

不确定导致此错误的原因。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:9)

这不合适:

LANGUAGE sql

改为使用:

LANGUAGE plpgsql

您尝试使用的语法不是纯SQL语言,而是程序PL / pgSQL语言。在PostgreSQL中,你可以安装不同的语言,而PL / pgSQL在这方面只是一个小问题。这也意味着您可能会收到错误消息,即未安装此语言。在那种情况下使用

CREATE LANGUAGE plpgsql;

激活它。根据PostgreSQL的版本,您可能需要超级用户权限才能执行此步骤。

玩得开心。

答案 1 :(得分:1)

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