sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL IF-erklæring

DO
$do$
BEGIN
   IF EXISTS (SELECT FROM orders) THEN
      DELETE FROM orders;
   ELSE
      INSERT INTO orders VALUES (1,2,3);
   END IF;
END
$do$

Der er ingen proceduremæssige elementer i standard SQL. IF sætning er en del af standardsprogsproget PL/pgSQL. Du skal oprette en funktion eller udføre en ad-hoc-sætning med DO kommando.

Du skal bruge et semikolon (; ) i slutningen af ​​hver sætning i plpgsql (undtagen den sidste END ).

Du skal bruge END IF; i slutningen af ​​IF erklæring.

Et undervalg skal være omgivet af parenteser:

    IF (SELECT count(*) FROM orders) > 0 ...

Eller:

    IF (SELECT count(*) > 0 FROM orders) ...

Dette er dog tilsvarende og meget hurtigere:

    IF EXISTS (SELECT FROM orders) ...

Alternativ

Den ekstra SELECT er ikke nødvendig. Dette gør det samme, hurtigere:

DO
$do$
BEGIN
   DELETE FROM orders;
   IF NOT FOUND THEN
      INSERT INTO orders VALUES (1,2,3);
   END IF;
END
$do$

Selvom det er usandsynligt, kan samtidige transaktioner, der skrives til den samme tabel, forstyrre. For at være helt sikker skal du skrive-lås tabellen i den samme transaktion, før du fortsætter som vist.



  1. MONTHS_BETWEEN() Funktion i Oracle

  2. PostgreSQL + Hibernate + Spring automatisk oprette database

  3. Vis alle forespørgsler, der kommer til en Oracle-database

  4. Opdater en materialiseret visning automatisk ved hjælp af en regel eller notifikation