10

为什么我总是从 Postgres 收到以下错误?

syntax error at or near "IF"

我阅读了PostgreSQL:文档:8.3:控制结构。首先,我尝试执行一个困难的查询(使用子查询),但随后我尝试执行一个像这样的简单查询:

IF 2 <> 0 THEN select * from users; END IF;

错误仍然相同。我究竟做错了什么?

4

3 回答 3

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 没有意义。

于 2012-04-04T14:20:08.217 回答
5

您没有将 PL/pgSQL 控制结构封闭在匿名块或 PL/pgSQL 函数中。

有关此控制结构的 SQL 版本,请参阅CASE.

于 2012-04-04T13:45:21.820 回答
1

你没有封闭那个 PL/pgSQL。它们需要用匿名代码块括起来。您的代码示例:

DO $$ BEGIN

    IF 2 <> 0 THEN select * from users; END IF;

END$$;
于 2016-11-28T16:06:32.040 回答