DO
$do$
BEGIN
IF EXISTS (SELECT FROM orders) THEN
DELETE FROM orders;
ELSE
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
In Standard-SQL gibt es keine prozeduralen Elemente. Das IF
-Anweisung ist Teil der standardmäßigen prozeduralen Sprache PL/pgSQL. Sie müssen eine Funktion erstellen oder eine Ad-hoc-Anweisung mit DO
ausführen Befehl.
Sie benötigen ein Semikolon (;
) am Ende jeder Anweisung in plpgsql (mit Ausnahme des abschließenden END
). ).
Sie benötigen END IF;
am Ende des IF
Aussage.
Eine Unterauswahl muss in Klammern eingeschlossen sein:
IF (SELECT count(*) FROM orders) > 0 ...
Oder:
IF (SELECT count(*) > 0 FROM orders) ...
Dies ist jedoch gleichwertig und viel schneller:
IF EXISTS (SELECT FROM orders) ...
Alternative
Der Zusatz SELECT
wird nicht gebraucht. Dies macht dasselbe, schneller:
DO
$do$
BEGIN
DELETE FROM orders;
IF NOT FOUND THEN
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
Obwohl es unwahrscheinlich ist, können gleichzeitige Transaktionen, die in dieselbe Tabelle schreiben, stören. Um absolut sicher zu gehen, verriegeln Sie die Tabelle in derselben Transaktion, bevor Sie wie gezeigt fortfahren.