PostgreSQL IF-THEN-ELSE控制结构

时间:2012-04-04 13:14:03

标签: sql postgresql plpgsql

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

syntax error at or near "IF"

我读了PostgreSQL: Documentation: 8.3: Control Structures。首先,我尝试执行一个困难的查询(使用子查询),但后来我尝试执行这样一个简单的查询:

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

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

3 个答案:

答案 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$$;