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 comandoDO
.Necesitas a
;
al final de cada declaración en plpgsql ( excepto para el finalEND
).Necesitas
END IF;
al final de la declaraciónIF
.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$