e-learning、オラクル研修、LMS(学習管理システム)のiStudy

e-learning、オラクル研修、LMS(学習管理システム)のiStudy

第34回 「パッケージでユーザ定義の型を標準化する」

2012.09.03

前回のコラムで、PL/SQLパッケージの利用者サイドからの本質は、グローバルな宣言部であると、私見を申し上げましたが、そのような観点からパッケージに宣言すべきものとして、他にはユーザ定義の型が一般的です。

ユーザ定義の型とは、レコード型(第12回)、コレクション型(第13回)などです。

システムでは、必要に応じて、レコード変数や、コレクション変数を使います。
それらの型は、パッケージ仕様部で宣言することによって、グローバルに参照可能となります。
したがって、そのことにより、ユーザ定義の型を仮パラメータの型とするプロシージャやファンクションが作成できるので、システム構築に大変有効です。

例えば、トランザクションで処理するデータの一式をレコード変数に格納して扱うことはよくあることです。
そういった場合、そのレコード変数の型をパッケージ仕様部に宣言しておけば、どのPL/SQLプログラムでも共通にその型で変数を宣言できます。
もちろん、その型を仮パラメータの型とするプロシージャも可能です。

例えば、プロシージャ1で、ユーザからのリクエストを受けて、リクエストパラメータの値をレコード型変数に格納して、そのレコード型変数をトランザクション処理用のプロシージャ2に渡しコールする。
プロシージャ2はそのレコード変数でトランザクションを実行し、その結果を別のレコー型変数でプロシージャ1に戻す。
プロシージャ1は、そのレコード型変数を結果表示用のプロシージャ3に渡してコールする。
プロシージャ3はそのレコード型変数の内容をもとに結果を表示する。

レコード型をパッケージ仕様部に宣言しておけば、上記のような、プロシージャ間で共通の型での値の連携が可能になります。
上記の場合プロシージャ1は、ユーザからのリクエストの受付や全体の司令塔です。
実際のトランザクションは、プロシージャ2で行います。
その結果の表示は、プロシージャ3で行います。

このように、全体の制御、処理、表示などの基本機能別にをそれぞれ別のプロシージャで分担することで、プログラム開発の効率やメンテナンス性が向上します。そして、そうい った連携をスムーズに行うためには、パッケージ仕様部に必要なレコード型や、コレクション型を宣言しておけばいいのです。

いかがですか?これもパッケージの一般的な利用法です。

それでは今回はここまでとします。また次回ご期待ください。

先頭へ戻る