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.