DO
$do$
BEGIN
IF EXISTS (SELECT FROM orders) THEN
DELETE FROM orders;
ELSE
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
Er zijn geen procedurele elementen in standaard SQL. De IF statement maakt deel uit van de standaard proceduretaal PL/pgSQL. U moet een functie maken of een ad-hocstatement uitvoeren met de DO commando.
Je hebt een puntkomma nodig (; ) aan het einde van elke instructie in plpgsql (behalve de laatste END ).
Je hebt END IF; . nodig aan het einde van de IF verklaring.
Een subselectie moet tussen haakjes staan:
IF (SELECT count(*) FROM orders) > 0 ...
Of:
IF (SELECT count(*) > 0 FROM orders) ...
Dit is echter equivalent en veel sneller:
IF EXISTS (SELECT FROM orders) ...
Alternatief
De extra SELECT is niet nodig. Dit doet hetzelfde, sneller:
DO
$do$
BEGIN
DELETE FROM orders;
IF NOT FOUND THEN
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
Hoewel het onwaarschijnlijk is, kunnen gelijktijdige transacties die naar dezelfde tabel schrijven, interfereren. Om absoluut zeker te zijn, vergrendelt u de tafel in dezelfde transactie voordat u verder gaat zoals aangetoond.