OracleのPL/SQLとは

OracleのPL/SQL、ストアド

Oracleのプログラミング言語「PL/SQL」があります。PL/SQLはサーバー側で処理するプログラムです。

ストアドといわれております。Oracleのストアドは3種類あります。

  1. プロシージャ
  2. ファンクション
  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のジョブ

Oracleのトリガー(trigger)とは

OracleのPL/SQLのまとめ

  • Oracleのプログラミング言語「PL/SQL
  • Oracleサーバー側で処理される
  • 速度や時間を意識するときに使う

以上、OracleのPL/SQLのまとめでした。