PostgreSQL ne supportait pas les procédures stockées jusqu'à PG11. Avant cela, vous pouviez obtenir le même résultat en utilisant une fonction. Par exemple :
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;
Vous pouvez ensuite l'appeler ainsi :
select * from MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );
Les principales limitations des fonctions stockées de Pg - par rapport aux véritables procédures stockées - sont :
- impossibilité de renvoyer plusieurs ensembles de résultats
- pas de prise en charge des transactions autonomes (BEGIN, COMMIT et ROLLBACK au sein d'une fonction)
- pas de prise en charge de la syntaxe CALL standard SQL, bien que les pilotes ODBC et JDBC traduisent les appels pour vous.
Exemple
A partir de PG11, la CREATE PROCEDURE
syntaxe est introduite qui prend en charge les transactions.
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$;
Qui pourrait être appelé avec :
CALL MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );