Sử dụng postgresql 8.4, tôi đang cố gắng để viết một hàm, và nó trông như thế này:Tuy nhiên, một lưu trữ lỗi cú pháp thủ tục - IF-THEN-ELSE
CREATE OR REPLACE FUNCTION addorupdate(smallint, varchar(7)) RETURNS void AS
$$
BEGIN
IF EXISTS (SELECT * FROM consist WHERE slave = $1) THEN
UPDATE consist SET
master = $2
where slave = $1;
ELSE
INSERT INTO consist(slave, master) VALUES ($2, $1);
END IF;
END;
$$
LANGUAGE SQL;
Tuy nhiên, nó không thành công như thế này:
ERROR: syntax error at or near "IF"
LINE 4: IF EXISTS (SELECT * FROM consist WHERE slave = $1) THEN
... và tôi đã lãng phí quá nhiều thời gian và caffeine để tìm ra lý do tại sao và có thể sử dụng ai đó bằng mắt mới để giúp tôi.
Nếu nó không rõ ràng những gì tôi đang cố gắng đạt được: nô lệ là một cột các giá trị duy nhất. Nếu nó tồn tại, UPDATE nó với master hiện tại. Nếu không, INSERT.
UPDATE: ngôn ngữ đã thay đổi để plpgsql, và bây giờ ném:
ERROR: language "plpgsql" does not exist
UPDATE:
CREATE LANGUAGE plpgsql;
(: QUYẾT :)
Sau đó, bạn cần phải 'tạo ngôn ngữ'. Hoặc 'tạo phần mở rộng', giảm dần trên phiên bản Postgresql của bạn. Xem http://www.postgresql.org/docs/9.2/static/sql-createlanguage.html –
Trợ giúp http://www.postgresql.org/docs/8.4/static/xplang-install.html này có hữu ích không? –
@ Colin'tHart Tôi không có pgplsql trong pg_pltemplate, nhưng hãy thử plpgsql thay vì (đầu tiên từ đầu!) Đã làm các trick. Chúc mừng sự giúp đỡ! – Jarmund