DO
$do$
BEGIN
IF EXISTS (SELECT FROM orders) THEN
DELETE FROM orders;
ELSE
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
Det finns inga procedurelement i standard SQL. IF
uttalandet är en del av standardprocedurspråket PL/pgSQL. Du måste skapa en funktion eller köra en ad-hoc-sats med DO
kommando.
Du behöver ett semikolon (;
) i slutet av varje sats i plpgsql (förutom den sista END
).
Du behöver END IF;
i slutet av IF
uttalande.
Ett underval måste omges av parentes:
IF (SELECT count(*) FROM orders) > 0 ...
Eller:
IF (SELECT count(*) > 0 FROM orders) ...
Detta är dock likvärdigt och mycket snabbare:
IF EXISTS (SELECT FROM orders) ...
Alternativ
Den extra SELECT
behövs inte. Detta gör samma sak, snabbare:
DO
$do$
BEGIN
DELETE FROM orders;
IF NOT FOUND THEN
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
Även om det är osannolikt, kan samtidiga transaktioner som skrivs till samma bord störa. För att vara helt säker, skrivlås tabellen i samma transaktion innan du fortsätter som visat.