OracleのPL/SQL ストアド
Oracleのプログラミング言語「PL/SQL」があります。PL/SQLはサーバー側で処理するプログラムです。
ストアド
サーバー側で処理するプログラムは一般的に「ストアド」といわれております。Oracleのストアドは3種類あります。
- プロシージャ
- ファンクション
- パッケージ
プロシージャやファンクションは通常のプログラムと同じ意味です。処理をただ実行するだけのプロシージャ、結果を返すことができるファンクション(関数)ですね。
パッケージはこれらをまとめることができます。つまりパッケージはクラスのようなものです。
参照:Oracle Database PL/SQL言語リファレンス
PL/SQLはなぜ必要か?
ではこのPL/SQL、どういうケースで使えばいいのか?
通常は呼び出し側のプログラムでSQLをゴリゴリ書きます。JAVAやC#などのアプリケーション側でSQLを発行するのは一般的ですよね?
ではなぜストアドで、つまりPL/SQLを使ってOracleサーバー側で処理する必要があるのでしょうか?
距離と時間を考えると・・
よくあるケースは「距離」と「時間」を考慮する場合です。
例えば、クライアントとサーバの物理的な場所が離れているケース。大阪のサーバーを東京で使う場合など。
物理的に離れた環境でSQLを繰り返し発行し、取得した1件ずつに対し登録するような処理をしたらどうでしょうか?
2万回と1回の往復はどちらが効率的か?
例えば10,000件のレコードに対してこの処理を行った場合、SELECTとINSERTが1回ずつ発生するので合計20,000回の往復を東京・大阪間でしなければなりません。
大阪と東京を何度も往復する・・・これはよくありませんよね?処理時間が遅くなりますから。このようなケースでストアドは利用されます。
この20,000回の検索&登録をサーバー側で処理してもらいます。
具体的にいうと、OracleサーバーにPL/SQLでプログラミングしたものをコンパイルしておくのです。あとはクライントのプログラムはストアドを実行するだけ。サーバー側でSQLを発行してくれます。
そうすれば東京・大阪間の往復は1回のみとなります。往復回数が20,000回と1回。処理時間は大きく異なりますよね?
このように、処理時間を考慮する場合にストアドはよく利用されます。何度もSQLを繰り返し発行するケースはストアドで効率的に処理するべきです。
サーバーの負担も考える
ちなみにデメリットとしてはサーバー側で処理するのでサーバーの負荷が高くなります。
ただ、最近のサーバーであれば余程の処理でもない限り、神経質になる必要はないかもしれません。
ストアドはこのような使い方以外でも、Oracle内でスケジュール的に呼び出したり、データ更新のタイミングで呼び出すこともできます。
「ジョブ」や「トリガー」というものです。詳細はこちらを参照してください。
OracleのPL/SQLのまとめ
- Oracleのプログラミング言語「PL/SQL」
- Oracleサーバー側で処理される
- 速度や時間を意識するときに使う
以上、OracleのPL/SQLのまとめでした。
コメント