2017-07-26 289 views
0

我有一个函数,我需要根据inputid做不同的选择。所以我添加了如下的条件。Postgres - 错误:在“IF”或其附近的语法错误

.... 
begin 
IF(iv_binrocess = 1 AND IsNull(iv_binno,'') != '') THEN 
...//some process here 
END If; 
... 
End 

当我运行的功能,我得到了错误“

ERROR: syntax error at or near "IF" I referred many sites and tutorials, nothing helped me.

谁能帮我解决这个问题?

感谢

+4

我怀疑你已经从样品剥离足够的代码你贴出来解决它的问题。请发布有关错误的完整代码。你确定你正在看功能体中正确的'IF'吗? –

+0

向我们展示您的**完整**代码。 ** [编辑] **您的问题 - 请不要**在注释中张贴代码或其他信息。 –

+0

另外,你添加了Postgres的标签,但是Postgres没有'IsNull'函数,它在Postgres中的等价物是'coalesce' - [见文档](https://www.postgresql.org/docs/current/static/功能-conditional.html#函数 - COALESCE - NVL - IFNULL)。 –

回答

0

WAG,因为你删除最的重要信息:您正在尝试使用PL/pgsql主体创建函数,但声明了SQL

craig=> CREATE FUNCTION test() RETURNS void LANGUAGE sql AS 
$$ BEGIN IF TRUE THEN PERFORM 1; END IF; END; $$ ; 
ERROR: syntax error at or near "IF" 
LINE 1: ...TION test() RETURNS void LANGUAGE sql AS $$ BEGIN IF TRUE TH... 

声明PL/pgSQL函数为LANGUAGE plpgsql

如果您不想使用SQL函数,请使用CASE表达式而不是IF

CREATE FUNCTION test2() RETURNS integer LANGUAGE sql 
AS $$ SELECT CASE WHEN TRUE THEN 1 ELSE 0 END; $$; 

(请注意,我没有打扰到可读格式这些。不要写功能于现实像这样的代码一行。)

相关问题