PostgreSQL không hỗ trợ các thủ tục được lưu trữ cho đến PG11. Trước đó, bạn có thể nhận được kết quả tương tự bằng cách sử dụng một hàm. Ví dụ:
CREATE FUNCTION MyInsert(_sno integer, _eid integer, _sd date, _ed date, _sid integer, _status boolean)
RETURNS void AS
$BODY$
BEGIN
INSERT INTO app_for_leave(sno, eid, sd, ed, sid, status)
VALUES(_sno, _eid, _sd, _ed, _sid, _status);
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
Sau đó, bạn có thể gọi nó như vậy:
select * from MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );
Các hạn chế chính đối với các hàm được lưu trữ của Pg - so với các thủ tục được lưu trữ thực sự - là:
- không có khả năng trả về nhiều bộ kết quả
- không hỗ trợ cho các giao dịch tự quản (BEGIN, COMMIT và ROLLBACK trong một hàm)
- không hỗ trợ cú pháp CALL chuẩn SQL, mặc dù trình điều khiển ODBC và JDBC sẽ dịch các lệnh gọi cho bạn.
Ví dụ
Bắt đầu từ PG11, CREATE PROCEDURE
cú pháp được giới thiệu cung cấp hỗ trợ cho các giao dịch.
CREATE PROCEDURE MyInsert(_sno integer, _eid integer, _sd date, _ed date, _sid integer, _status boolean)
LANGUAGE SQL
AS $BODY$
INSERT INTO app_for_leave(sno, eid, sd, ed, sid, status)
VALUES(_sno, _eid, _sd, _ed, _sid, _status);
$BODY$;
Có thể được gọi bằng:
CALL MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );