sql >> Base de Datos >  >> RDS >> PostgreSQL

Declaración IF de PostgreSQL

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.