PostgreSQL nie obsługiwał procedur składowanych aż do wersji PG11. Wcześniej można było uzyskać ten sam wynik za pomocą funkcji. Na przykład:
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;
Następnie możesz to nazwać tak:
select * from MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );
Główne ograniczenia funkcji składowanych Pg - w porównaniu z prawdziwymi procedurami składowanymi - to:
- niemożność zwrócenia wielu zestawów wyników
- brak obsługi transakcji autonomicznych (BEGIN, COMMIT i ROLLBACK w ramach funkcji)
- brak obsługi standardowej składni SQL CALL, chociaż sterowniki ODBC i JDBC będą tłumaczyć wywołania za Ciebie.
Przykład
Począwszy od PG11, CREATE PROCEDURE
wprowadzono składnię, która zapewnia obsługę transakcji.
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$;
Które można nazwać za pomocą:
CALL MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );