PostgreSQL no admitió procedimientos almacenados hasta PG11. Antes de eso, podría obtener el mismo resultado usando una función. Por ejemplo:
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;
A continuación, puede llamarlo así:
select * from MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );
Las principales limitaciones de las funciones almacenadas de Pg, en comparación con los verdaderos procedimientos almacenados, son:
- incapacidad para devolver múltiples conjuntos de resultados
- sin soporte para transacciones autónomas (BEGIN, COMMIT y ROLLBACK dentro de una función)
- no hay compatibilidad con la sintaxis CALL estándar de SQL, aunque los controladores ODBC y JDBC traducirán las llamadas por usted.
Ejemplo
A partir de PG11, el CREATE PROCEDURE
se introduce la sintaxis que proporciona soporte para transacciones.
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$;
Que podría llamarse con:
CALL MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );