PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Istruzione PostgreSQL IF

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

Non ci sono elementi procedurali nell'SQL standard. Il IF fa parte del linguaggio procedurale predefinito PL/pgSQL. Devi creare una funzione o eseguire un'istruzione ad hoc con DO comando.

Hai bisogno di un punto e virgola (; ) alla fine di ogni istruzione in plpgsql (tranne per il END finale ).

Hai bisogno di END IF; alla fine del IF dichiarazione.

Una sottoselezione deve essere racchiusa tra parentesi:

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

Oppure:

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

Questo è equivalente e molto più veloce, però:

    IF EXISTS (SELECT FROM orders) ...

Alternativa

Il SELECT aggiuntivo non è necessario. Questo fa lo stesso, più velocemente:

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

Sebbene improbabili, le transazioni simultanee che scrivono sulla stessa tabella possono interferire. Per essere assolutamente sicuro, blocca in scrittura la tabella nella stessa transazione prima di procedere come mostrato.