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.