PostgreSQL IF-THEN-ELSE控制结构

Elk*_*kan 10 sql postgresql plpgsql

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

syntax error at or near "IF"

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

IF 2 <> 0 THEN select * from users; END IF;
Run Code Online (Sandbox Code Playgroud)

错误仍然是一样的.我究竟做错了什么?

Pav*_*ule 18

IF 2 <> 0 THEN select * from users; END IF;
Run Code Online (Sandbox Code Playgroud)

您不能在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;
Run Code Online (Sandbox Code Playgroud)

当你从函数中得到一些结果时,你必须使用RETURN语句 - plpgsql只知道函数,它不支持程序 - 所以无限制的SELECT没有意义.


Mil*_*dev 5

您没有将PL / pgSQL控件结构包含在匿名块或PL / pgSQL函数中。

有关此控件结构的SQL版本,请参阅的文档CASE