PostgreSQL stödde inte lagrade procedurer förrän PG11. Innan dess kunde du få samma resultat med en funktion. Till exempel:
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 sedan kalla det så här:
select * from MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );
De huvudsakliga begränsningarna för Pg:s lagrade funktioner - jämfört med sanna lagrade procedurer - är:
- oförmåga att returnera flera resultatuppsättningar
- inget stöd för autonoma transaktioner (BEGIN, COMMIT och ROLLBACK inom en funktion)
- inget stöd för SQL-standardens CALL-syntax, även om ODBC- och JDBC-drivrutinerna översätter anrop åt dig.
Exempel
Med start från PG11, CREATE PROCEDURE
syntax introduceras som ger stöd för 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 skulle kunna kallas med:
CALL MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );