oracle

Oracle ストアドプログラム

ストアドプログラムとは

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
;
パッケージのDDLファイル出力するには以下が便利
スポンサーリンク