sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL příkaz IF

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

Standardní SQL neobsahuje žádné procedurální prvky. IF je součástí výchozího procedurálního jazyka PL/pgSQL. Musíte vytvořit funkci nebo provést příkaz ad-hoc pomocí DO příkaz.

Potřebujete středník (; ) na konci každého příkazu v plpgsql (kromě posledního END). ).

Potřebujete END IF; na konci IF prohlášení.

Dílčí výběr musí být uzavřen v závorkách:

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

Nebo:

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

To je však ekvivalentní a mnohem rychlejší:

    IF EXISTS (SELECT FROM orders) ...

Alternativa

Další SELECT není potřeba. To dělá totéž, rychleji:

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

I když je to nepravděpodobné, souběžný zápis transakcí do stejné tabulky může rušit. Chcete-li si být naprosto jisti, zamkněte tabulku ve stejné transakci, než budete pokračovat, jak je ukázáno.



  1. Jak vybrat určitý počet znaků zleva nebo zprava od řetězce na serveru SQL

  2. Jak získat odlišné záznamy z tabulky v SQL Server - SQL Server / TSQL Tutorial 112

  3. Omezení bránící vložení prázdného řetězce do MySQL

  4. Jak vrátit Unixové časové razítko na SQL Server (T-SQL)