PostgreSQL не поддържаше съхранени процедури до PG11. Преди това бихте могли да получите същия резултат с помощта на функция. Например:
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;
След това можете да го наречете така:
select * from MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );
Основните ограничения на съхранените функции на Pg - в сравнение с истинските съхранени процедури - са:
- невъзможност за връщане на множество набори от резултати
- няма поддръжка за автономни транзакции (BEGIN, COMMIT и ROLLBACK в рамките на функция)
- няма поддръжка за стандартния SQL синтаксис CALL, въпреки че ODBC и JDBC драйверите ще превеждат повиквания вместо вас.
Пример
Започвайки от PG11, CREATE PROCEDURE
въведен е синтаксис, който осигурява поддръжка за транзакции.
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$;
Което може да бъде извикано с:
CALL MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );