PostgreSQL IF语句

Vla*_*nov 63 sql postgresql if-statement plpgsql

我如何在Postgres中进行此类查询?

IF (select count(*) from orders) > 0
THEN
  DELETE from orders
ELSE 
  INSERT INTO orders values (1,2,3);
Run Code Online (Sandbox Code Playgroud)

Erw*_*ter 115

尝试:

DO
$do$
BEGIN
IF EXISTS (SELECT FROM orders) THEN
   DELETE FROM orders;
ELSE 
   INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
Run Code Online (Sandbox Code Playgroud)

主要观点

替代

SELECT在这里你根本不需要额外的.这样做也快一点:

DO
$do$
BEGIN
DELETE FROM orders;
IF NOT FOUND THEN
   INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
Run Code Online (Sandbox Code Playgroud)

  • @Luffydude:在我的代码中你会在哪里找到`%`?IOW:上面的语句有效,你引入了一个无关的语法错误.看起来你输入`%do%`而不是`$ do $`. (8认同)

Mah*_*ood 26

只是为了帮助,如果有人偶然发现像我这样的问题,如果你想在PostgreSQL中使用if,你使用"CASE"

select 
    case
        when stage = 1 then 'running'
        when stage = 2 then 'done'
        when stage = 3 then 'stopped'
    else 
        'not running'
    end as run_status from processes
Run Code Online (Sandbox Code Playgroud)


Woo*_*Moo 8

来自文档

IF boolean-expression THEN
    statements
ELSE
    statements
END IF;
Run Code Online (Sandbox Code Playgroud)

因此,在上面的示例中,代码应如下所示:

IF select count(*) from orders > 0
THEN
  DELETE from orders
ELSE 
  INSERT INTO orders values (1,2,3);
END IF;
Run Code Online (Sandbox Code Playgroud)

你错过了:END IF;

  • 我也收到相同的错误`错误:“if”处或附近的语法错误 –` (3认同)
  • 是的,我尝试过,但它不起作用.错误:"if"处或附近的语法错误 (2认同)
  • 1.请不要链接beta文档; 2.您的示例需要包含在[`DO`](http://www.postgresql.org/docs/current/static/sql-do.html)中,以用作SQL语句而不是PL/pgSQL函数. (2认同)

use*_*ser 5

您还可以将PL / pgSQL CASE的基本结构与匿名代码块过程块一起使用:

DO $$ BEGIN
    CASE
        WHEN boolean-expression THEN
          statements;
        WHEN boolean-expression THEN
          statements;
        ...
        ELSE
          statements;
    END CASE;
END $$;
Run Code Online (Sandbox Code Playgroud)

参考文献:

  1. http://www.postgresql.org/docs/current/static/sql-do.html
  2. https://www.postgresql.org/docs/current/static/plpgsql-control-structures.html