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.