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$
Макар и малко вероятно, едновременните транзакции, записващи в една и съща таблица, може да попречат. За да сте абсолютно сигурни, заключете таблицата в същата транзакция, преди да продължите, както е показано.