PostgreSQLはPG11までストアドプロシージャをサポートしていませんでした。それ以前は、関数を使用して同じ結果を得ることができました。例:
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;
その後、次のように呼び出すことができます:
select * from MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );
Pgのストアド関数の主な制限は、実際のストアドプロシージャと比較して、次のとおりです。
- 複数の結果セットを返すことができない
- 自律トランザクション(関数内のBEGIN、COMMIT、およびROLLBACK)はサポートされていません
- SQL標準のCALL構文はサポートされていませんが、ODBCおよびJDBCドライバーが呼び出しを変換します。
例
PG11以降、CREATE PROCEDURE
トランザクションのサポートを提供する構文が導入されました。
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$;
これは次のように呼び出すことができます:
CALL MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );