PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Instruction IF 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$

Il n'y a pas d'éléments procéduraux dans le SQL standard. Le IF fait partie du langage procédural par défaut PL/pgSQL. Vous devez créer une fonction ou exécuter une instruction ad-hoc avec le DO commande.

Vous avez besoin d'un point-virgule (; ) à la fin de chaque instruction dans plpgsql (sauf pour le dernier END ).

Vous avez besoin de END IF; à la fin du IF déclaration.

Une sous-sélection doit être entourée de parenthèses :

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

Ou :

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

C'est équivalent et bien plus rapide :

    IF EXISTS (SELECT FROM orders) ...

Alternative

Le SELECT supplémentaire n'est pas nécessaire. Cela fait la même chose, plus rapidement :

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

Bien que peu probable, des transactions simultanées écrivant dans la même table peuvent interférer. Pour être absolument sûr, verrouillez la table en écriture dans la même transaction avant de procéder comme indiqué.