オブジェクト指向なストアドプロシージャ

今までにPL*SQLしか使ったことがないので、ひょっとしたら世の中には既に存在するのかもしれませんが、ストアドプロシージャもオブジェクト指向で実装できれば、コードを書く量がグンと減りそうです。

例えば、従業員テーブルのオブジェクトを作成して一人分のデータを登録する場合に以下のようにできれば楽ではないでしょうか。

$employee = Table.getInstance("employee");
$employee.employee_id = 10;
$employee.first_name = 'cloned';
INSERT INTO $employee;

上の構文を書くためには、$employeeはテーブル名やカラムフィールドなどが正しく定義されている必要があるので、Tableインタフェースを実装した変数を取得するようなイメージです。

ストアドプロシージャであればデータベースに定義されているテーブルの状態を調べることは簡単だと思いますので、上の例で続けると、$employee変数の元となるクラスを自分で定義する必要はないでしょう。Table.getInstance()ファクトリで指定されたテーブル名のテーブル定義のオブジェクトを自動的に作ることができると思います。

SELECTで複数のテーブルから取得する場合のオブジェクトは自分で定義するしかなさそうですが、PL*SQLの%TYPEによるフィールド定義ができれば元テーブルに変更があっても修繕の必要がありません。

class emp_dep implements Table {
$employee_name    employee.employee_name%TYPE;
$department_name  department.name%TYPE;
}

このような感じでしょうか。最近流行のJavaScriptのようなプロトタイプベースにして既存テーブルオブジェクトに入れ込んでいくイメージでも良いかもしれません。

通常の言語では上記のような内容をORマッピングで実現していると思いますが、データバッチなどストアドプロシージャで行った方がストレートで良い場合もあると思います。

誰か作らないでしょうか。

コメントする

メールアドレスが公開されることはありません。