DO
$do$
BEGIN
IF EXISTS (SELECT FROM orders) THEN
DELETE FROM orders;
ELSE
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
В стандартния SQL няма процедурни елементи. IF
операторът е част от процедурния език по подразбиране PL/pgSQL. Трябва да създадете функция или да изпълните ad-hoc оператор с DO
команда.
Имате нужда от точка и запетая (;
) в края на всеки израз в plpgsql (с изключение на крайния END
). ).
Нуждаете се от END IF;
в края на IF
изявление.
Подизборът трябва да бъде заобиколен от скоби:
IF (SELECT count(*) FROM orders) > 0 ...
Или:
IF (SELECT count(*) > 0 FROM orders) ...
Това обаче е еквивалентно и много по-бързо:
IF EXISTS (SELECT FROM orders) ...
Алтернатива
Допълнителният SELECT
не е необходимо. Това прави същото, по-бързо:
DO
$do$
BEGIN
DELETE FROM orders;
IF NOT FOUND THEN
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
Макар и малко вероятно, едновременните транзакции, записващи в една и съща таблица, може да попречат. За да сте абсолютно сигурни, заключете таблицата в същата транзакция, преди да продължите, както е показано.