what postgres postgre guide example commands sql postgresql if-statement plpgsql

guide - Declaración IF de PostgreSQL



using psql command line (4)

¿Cómo puedo hacer tal consulta en Postgres?

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


De los docs

IF boolean-expression THEN statements ELSE statements END IF;

Entonces, en el ejemplo anterior, el código debería verse de la siguiente manera:

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

Estabas perdido: END IF;


Solo para ayudar si alguien tropieza con esta pregunta como yo, si quiere usarla en PostgreSQL, usa "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



Tratar:

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$

Puntos principales

  • No hay elementos de procedimiento en SQL estándar. La instrucción IF es parte del lenguaje de procedimiento predeterminado PL / pgSQL. Necesita crear una función o ejecutar una declaración ad-hoc con el comando DO .

  • Necesitas a ; al final de cada declaración en plpgsql ( excepto para el final END ).

  • Necesitas END IF; al final de la declaración IF .

  • Una selección secundaria debe estar rodeada por paréntesis:

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

    O:

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

    Sin embargo, esto es equivalente y mucho más rápido:

    IF EXISTS (SELECT 1 FROM orders) ...

Alternativa

En realidad, no necesita un SELECT adicional aquí. Esto hace lo mismo, un poco más rápido:

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