Инструкция PostgreSQL IF

Как я могу сделать такой запрос в Postgres?

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

4 ответов


попробуй:

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

основные моменты

  • в стандартном SQL нет процедурных элементов. The IF сообщении является частью процедурного языка по умолчанию PL / pgSQL. Вам нужно создать функцию или выполнить специальный оператор с помощью DO.

  • вам понадобится ; в конце каждого оператора в plpgsql (за исключением последнего END).

  • вам нужно END IF; в конце IF заявление.

  • суб-выбор должен быть окружен скобками:

    IF (SELECT count(*) FROM orders) > 0 ...
    

    или:

    IF (SELECT count(*) > 0 FROM orders) ...
    

    это эквивалентно и намного быстрее, хотя:

    IF EXISTS (SELECT 1 FROM orders) ...
    

альтернатива

вам на самом деле не нужно дополнительное SELECT здесь. Это делает то же самое, немного быстрее:

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

просто, чтобы помочь, если кто-нибудь наткнется на этот вопрос, как мне, если вы хотите использовать if в PostgreSQL, вы используете "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

С docs

IF boolean-expression THEN
    statements
ELSE
    statements
END IF;

поэтому в приведенном выше примере код должен выглядеть следующим образом:

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

вы пропали: КОНЕЦ IF;


вы также можете использовать базовую структуру для случая PL/pgSQL с анонимный блок кода - процессуального блок:

DO $$ BEGIN
    CASE
        WHEN boolean-expression THEN
          statements;
        WHEN boolean-expression THEN
          statements;
        ...
        ELSE
          statements;
    END CASE;
END $$;

ссылки:

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