DO
$do$
BEGIN
IF EXISTS (SELECT FROM orders) THEN
DELETE FROM orders;
ELSE
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
No hay elementos de procedimiento en SQL estándar. El IF
La declaración es parte del lenguaje de procedimiento predeterminado PL/pgSQL. Debe crear una función o ejecutar una declaración ad-hoc con DO
comando.
Necesita un punto y coma (;
) al final de cada instrucción en plpgsql (excepto el END
final ).
Necesitas END IF;
al final del IF
declaración.
Una subselección debe estar entre 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 FROM orders) ...
Alternativa
El SELECT
adicional no es necesario. Esto hace lo mismo, 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$
Aunque es poco probable, las transacciones simultáneas que se escriben en la misma tabla pueden interferir. Para estar absolutamente seguro, bloquee la tabla contra escritura en la misma transacción antes de proceder como se muestra.