DO
$do$
BEGIN
IF EXISTS (SELECT FROM orders) THEN
DELETE FROM orders;
ELSE
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
Không có phần tử thủ tục nào trong SQL chuẩn. IF
câu lệnh là một phần của ngôn ngữ thủ tục mặc định PL / pgSQL. Bạn cần tạo một hàm hoặc thực thi một câu lệnh đặc biệt với DO
lệnh.
Bạn cần có dấu chấm phẩy (;
) ở cuối mỗi câu lệnh trong plpgsql (ngoại trừ END
cuối cùng ).
Bạn cần END IF;
ở cuối IF
tuyên bố.
Một lựa chọn phụ phải được bao quanh bởi dấu ngoặc đơn:
IF (SELECT count(*) FROM orders) > 0 ...
Hoặc:
IF (SELECT count(*) > 0 FROM orders) ...
Tuy nhiên, điều này tương đương và nhanh hơn nhiều:
IF EXISTS (SELECT FROM orders) ...
Thay thế
SELECT
bổ sung là không cần thiết. Thao tác này cũng diễn ra tương tự, nhanh hơn:
DO
$do$
BEGIN
DELETE FROM orders;
IF NOT FOUND THEN
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
Mặc dù không chắc, các giao dịch đồng thời ghi vào cùng một bảng có thể gây trở ngại. Để hoàn toàn chắc chắn, hãy ghi khóa bảng trong cùng một giao dịch trước khi tiếp tục như đã trình bày.