PostgreSQL understøttede ikke lagrede procedurer før PG11. Før det kunne du få det samme resultat ved at bruge en funktion. For eksempel:
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;
Du kan så kalde det sådan:
select * from MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );
De vigtigste begrænsninger for Pg's lagrede funktioner - sammenlignet med ægte lagrede procedurer - er:
- manglende evne til at returnere flere resultatsæt
- ingen understøttelse af autonome transaktioner (BEGIN, COMMIT og ROLLBACK i en funktion)
- ingen understøttelse af SQL-standard CALL-syntaksen, selvom ODBC- og JDBC-driverne vil oversætte opkald for dig.
Eksempel
Startende fra PG11, CREATE PROCEDURE
Der introduceres syntaks, som understøtter transaktioner.
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$;
Som kunne kaldes med:
CALL MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );