PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Instrukcja IF PostgreSQL

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

W standardowym SQL nie ma elementów proceduralnych. IF Instrukcja jest częścią domyślnego języka proceduralnego PL/pgSQL. Musisz utworzyć funkcję lub wykonać instrukcję ad-hoc z DO polecenie.

Potrzebujesz średnika (; ) na końcu każdej instrukcji w plpgsql (z wyjątkiem końcowego END ).

Potrzebujesz END IF; na końcu IF oświadczenie.

Wybór podrzędny musi być otoczony nawiasami:

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

Lub:

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

Jest to jednak równoważne i znacznie szybsze:

    IF EXISTS (SELECT FROM orders) ...

Alternatywna

Dodatkowy SELECT nie jest potrzebne. Robi to samo, szybciej:

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

Chociaż mało prawdopodobne, współbieżne transakcje zapisu do tej samej tabeli mogą przeszkadzać. Aby mieć absolutną pewność, zablokuj tabelę w tej samej transakcji przed kontynuowaniem, jak pokazano.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiedy nazwy kolumn lub tabel Postgresa wymagają cudzysłowów, a kiedy nie?

  2. Jak zmienić domyślną wartość kolumny w PostgreSQL?

  3. PostgreSQL:Auto-inkrementacja w oparciu o wielokolumnowe unikatowe ograniczenie

  4. Jak zapewnić klientowi API 1 000 000 wyników z bazy danych?

  5. Dodawanie obiektu dict do postgresql