PostgreSQL non supportava le stored procedure fino a PG11. Prima di ciò, potresti ottenere lo stesso risultato usando una funzione. Ad esempio:
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;
Puoi quindi chiamarlo così:
select * from MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );
Le principali limitazioni delle funzioni memorizzate di Pg, rispetto alle vere procedure memorizzate, sono:
- impossibilità di restituire più set di risultati
- nessun supporto per transazioni autonome (BEGIN, COMMIT e ROLLBACK all'interno di una funzione)
- nessun supporto per la sintassi CALL standard SQL, anche se i driver ODBC e JDBC tradurranno le chiamate per te.
Esempio
A partire da PG11, il CREATE PROCEDURE
viene introdotta la sintassi che fornisce supporto per le transazioni.
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$;
Che potrebbe essere chiamato con:
CALL MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );