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.