DO
$do$
BEGIN
IF EXISTS (SELECT FROM orders) THEN
DELETE FROM orders;
ELSE
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
Der er ingen proceduremæssige elementer i standard SQL. IF sætning er en del af standardsprogsproget PL/pgSQL. Du skal oprette en funktion eller udføre en ad-hoc-sætning med DO kommando.
Du skal bruge et semikolon (; ) i slutningen af hver sætning i plpgsql (undtagen den sidste END ).
Du skal bruge END IF; i slutningen af IF erklæring.
Et undervalg skal være omgivet af parenteser:
IF (SELECT count(*) FROM orders) > 0 ...
Eller:
IF (SELECT count(*) > 0 FROM orders) ...
Dette er dog tilsvarende og meget hurtigere:
IF EXISTS (SELECT FROM orders) ...
Alternativ
Den ekstra SELECT er ikke nødvendig. Dette gør det samme, hurtigere:
DO
$do$
BEGIN
DELETE FROM orders;
IF NOT FOUND THEN
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
Selvom det er usandsynligt, kan samtidige transaktioner, der skrives til den samme tabel, forstyrre. For at være helt sikker skal du skrive-lås tabellen i den samme transaktion, før du fortsætter som vist.