ストアドプログラムとは
PL/SQLという手続き型言語で記載したソースプログラムをOracleサーバへ登録(登録のタイミングでコンパイルがされる)して実行します。ストアドプログラムには大別してファンクション、プロシージャの2つがあります。
- ストアド・ファンクション
- 戻り値がある
- SQLの中でそのまま呼び出せる
- 基本的にはデータ更新が行われない処理を実装します。
- ストアド・プロシージャ
- 戻り値がない
- execまたはcallで実行する
- データ更新が行われる処理を実装します。
またストアド・パッケージと呼ばれるものがありますが、これはファンクションやプロシージャをあるグループでまとめたものです。ファンクション、プロシージャ何れもそのまま登録して実行する事ができますが、パッケージ化して登録しておいた方がソース管理の面や、パフォーマンスの面で有利になる場合があるで利用されます。以下がストアド・パッケージの特徴です。
- ストアド・パッケージ
- プロシージャやファンクションをある特定のグループでまとめたもの
- テーブル・ファンクションはパッケージでないと実現できない
- オーバロードはパッケージでないと実現できない
- 仕様部、本体部で構成(オブジェクトとして分かれている)
- パッケージ内変数値を他ファンクション、プロシージャと共有できる。
- 名前空間が広がる(パッケージを変えれば同一ファンクション名、プロシージャ名が利用できる)
- プロシージャやファンクションをある特定のグループでまとめたもの
これら、ストアド・ファンクション、ストアド・プロシージャ、ストアド・パッケージ何れもOracleサーバへ登録して動作するプログラムという事で「ストアドプログラム」と呼ばれています。(ストアドされて動作するプログラムはOracleだけではなく、PosgtreSQLやSQL Serverなど他RDBMSにも存在します)
ストアドプログラムの確認
DBA_PROCEDURESからファンクション、プロシージャ一覧出力
select t.OWNER,t.OBJECT_NAME,t.PROCEDURE_NAME,t.OBJECT_TYPE,t.PIPELINED,t.AUTHID from DBA_PROCEDURES t where t.OWNER='SOONI' order by t.OWNER,t.OBJECT_TYPE,t.OBJECT_NAME,t.SUBPROGRAM_ID ;
DBA_OBJECTSからファンクション、プロシージャをオブジェクト単位で一覧出力
select o.OBJECT_TYPE,o.OWNER,o.OBJECT_NAME,o.STATUS,o.CREATED,o.LAST_DDL_TIME from DBA_OBJECTS o where o.OBJECT_TYPE in ('PROCEDURE','FUNCTION','PACKAGE','PACKAGE BODY') and o.OWNER = 'SOONI' order by o.OWNER,o.OBJECT_TYPE,o.OBJECT_NAME ;
DBA_SOURCEからストアドプログラムのソースを出力
select t.OWNER,t.NAME,t.TYPE,t.LINE,t.TEXT from DBA_SOURCE t where t.OWNER ='SOONI' order by t.OWNER,t.TYPE,t.NAME,t.LINE ;