为什么我总是从 Postgres 收到以下错误?
syntax error at or near "IF"
我阅读了PostgreSQL:文档:8.3:控制结构。首先,我尝试执行一个困难的查询(使用子查询),但随后我尝试执行一个像这样的简单查询:
IF 2 <> 0 THEN select * from users; END IF;
错误仍然相同。我究竟做错了什么?
为什么我总是从 Postgres 收到以下错误?
syntax error at or near "IF"
我阅读了PostgreSQL:文档:8.3:控制结构。首先,我尝试执行一个困难的查询(使用子查询),但随后我尝试执行一个像这样的简单查询:
IF 2 <> 0 THEN select * from users; END IF;
错误仍然相同。我究竟做错了什么?
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 没有意义。
你没有封闭那个 PL/pgSQL。它们需要用匿名代码块括起来。您的代码示例:
DO $$ BEGIN
IF 2 <> 0 THEN select * from users; END IF;
END$$;