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.