为什么我总是从Postgres收到以下错误?
syntax error at or near "IF"
我读了PostgreSQL: Documentation: 8.3: Control Structures。首先,我尝试执行一个困难的查询(使用子查询),但后来我尝试执行这样一个简单的查询:
IF 2 <> 0 THEN select * from users; END IF;
错误仍然相同。我做错了什么?
答案 0 :(得分:18)
IF 2 <> 0 THEN select * from users; END IF;
您不能在plpgsql函数之外使用PL / pgSQL语句。如果这个片段来自plpgsql函数,那么它也是无意义的。你不能像T-SQL那样直接返回查询结果。
CREATE OR REPLACE FUNCTION test(p int)
RETURNS SETOF users AS $$
BEGIN
IF p = 1 THEN
RETURN QUERY SELECT * FROM users;
END IF;
RETURN;
END;
$$ LANGUAGE plpgsql;
当你从函数得到一些结果时,你必须使用RETURN语句 - plpgsql只知道函数,它不支持程序 - 所以无限制的SELECT没有意义。
答案 1 :(得分:5)
您没有在anonymous block或PL / pgSQL函数中包含该PL / pgSQL控件结构。
对于此控件结构的SQL版本,请参阅CASE
的文档。
答案 2 :(得分:1)
你没有附上那个PL / pgSQL。它们需要用anonymous code block括起来。代码示例:
DO $$ BEGIN
IF 2 <> 0 THEN select * from users; END IF;
END$$;