PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL-IF-Anweisung

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.