DO
$do$
BEGIN
IF EXISTS (SELECT FROM orders) THEN
DELETE FROM orders;
ELSE
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
Tidak ada elemen prosedural dalam SQL standar. IF
pernyataan adalah bagian dari bahasa prosedural default PL/pgSQL. Anda perlu membuat fungsi atau menjalankan pernyataan ad-hoc dengan DO
perintah.
Anda memerlukan titik koma (;
) di akhir setiap pernyataan di plpgsql (kecuali untuk END
final akhir ).
Anda membutuhkan END IF;
di akhir IF
pernyataan.
Sub-pilihan harus diapit oleh tanda kurung:
IF (SELECT count(*) FROM orders) > 0 ...
Atau:
IF (SELECT count(*) > 0 FROM orders) ...
Ini setara dan jauh lebih cepat:
IF EXISTS (SELECT FROM orders) ...
Alternatif
SELECT
additional tambahan tidak diperlukan. Ini melakukan hal yang sama, lebih cepat:
DO
$do$
BEGIN
DELETE FROM orders;
IF NOT FOUND THEN
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
Meskipun tidak mungkin, transaksi bersamaan yang menulis ke tabel yang sama dapat mengganggu. Untuk benar-benar yakin, tulis-kunci tabel dalam transaksi yang sama sebelum melanjutkan seperti yang ditunjukkan.