まずは、いわゆる"
ストアド"についてのまとめ。
ストアドは
(1) ストアド・プロシージャ
(2) ストアド・ファンクション
(3) ストアド・パッケージ
に分類される。
(2)が(1)を、(3)が(1), (2)をそれぞれ包含していると言える。
(2), (3)は表形式の返り値を持つこともできるため、SQLのFROM句に指定することもできる。
実際に使ったことがあるのは、(3)
ストアド・
パッケージ のみである。
比較的複雑な処理を一つにまとめて、
ストアド・
パッケージにあるパラメータを渡すことで動的に異なる結果を返すような仕組みを実装した。
具体的な比較を行ったわけではないが、一般に
ストアド・
パッケージを使用すると実行速度の向上が期待できる。
ストアド・
パッケージはDBのメモリ上でコンパイルされた状態で格納されているため、その分速度が上がるというわけである。
一点、
ストアド・
パッケージ使用時の注意として、既に
Oracleのセッション上に読み込まれている
ストアド・
パッケージを再コンパイルした場合などに、以下の
Oracleエラーが発生する場合がある:
ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "schema.package_name" has been invalidated
ORA-04065: not executed, altered or dropped package body "schema.package_name"
WEBサーバからコネクションプーリングを使用して
Oracleに接続している場合は、コネクションを使いまわすことになるので、
ストアド・
パッケージを使用した後で再コンパイルを行ってしまうと、別ユーザであっても上記
エラーが発生する可能性がある。
コネクションを複数用意している場合は、コネクションによっては
エラーが発生しないという場合もありうる。
このような場合は、WEBサーバを再起動するなどして、WEBサーバとして確保しているコネクションを一度開放する必要がある。
ストアド・
パッケージの変更はDB側のみの変更なのでWEBサーバを停止しなくてもいい、と安易に考えてしまうと
ORA-04068が発生しやすくなってしまう。
※ 引用元:
ストアドプロシージャ、パッケージとはORA-04068※ 上記サイトはいずれも
SHIFT the Oracle内のコンテンツです。
テーマ:Oracle - ジャンル:コンピュータ
- 2008/02/16(土) |
- Oracle
-
| トラックバック:0
-
| コメント:0