「仮想列」はLANSAリポジトリの特殊機能です。適切に使えば、アプリケーションの処理ロジックを簡潔にし、ユーザー・インターフェースを改善することができます。
「仮想列」もテーブル内に表示される列ですが、物理データベース・テーブルには存在しません。その値は、テーブル内の列 (基底列) の値をもとに、動的に求められます。(仮想列は別の仮想列から導き出すことも可能です) テーブルの複数列のデータを抽出したり、組み合わせたりして、テーブルにすでに含まれている情報量を拡大することができ、非常に柔軟性があります。
データベースに「概念的な構造」を実装するためにも仮想列が使えます。例えば CENTURY、YEAR、MONTH、DAY という列を組み合わせて、DATE という仮想列を作ることができます。これを「YYMMDD」という書式で格納しておき、検索や表示には「MMDDYY」や「DDMMYY」という書式も使えるようにする、といった設定も可能です。
プログラム側から見ると、仮想列も通常の列と同様、テーブルの一部として扱えます。しかしその値は、実際に格納されているのではなく、レコードの入出力時に I/O モジュールによって動的に求められます。テーブルの内容をそのまま表示した場合、仮想列は現れないので、これをキーとして扱うことはできません。仮想列の例をいくつか紹介します。
- 注文日付を画面には「MMDDYY」という書式で表示し、データベースには「YYMMDD」という書式で格納する。
- 値引き後の実売価格を、通常価格の75%として動的に求め、表示する。
- 市外局番と市内電話番号を組み合わせ、電話番号として表示する。
- 顧客名の先頭10文字分を名前(ファースト・ネーム)として表示する。
このように、列に対する文字列操作や変換、計算などといった処理を、簡潔に記述し、標準化して集中管理することができます。
仮想列はリポジトリに定義します。列単位、テーブル単位で妥当性規則を与えることも可能です。また、基底列に妥当性規則が設定されていれば、仮想列にも適用されます。このように、仮想列は、リポジトリの他の列と同じように使えます。
仮想列は、実テーブル中には存在しないので、LANSA外から直接使うことはできません。LANSA OAM (オブジェクト・アクセス・モジュール) の働きで、存在するように見せかけているのです。したがって、仮想列にアクセスできるのは、LANSA Open を使うクライアント・アプリケーションや、LANSA OAMを使うアプリケーションに限ります。
仮想列は他の列から派生したものであって、テーブル内に実際に存在する列ではありません。したがって、物理テーブルやインデックスのキーとして使うことはできません。キーとして使いたい場合は、テーブルの構成を見直し、仮想列ではなく実列として実装する必要があります。
仮想列を定義する方法としては次のようなものがあります。
- データ変換、部分文字列の操作、文字列の連結、数学演算、コード・フラグメントなど、LANSAの拡張定義機能を使う方法 (『LANSA テクニカル リファレンスガイド』の「テーブル内の仮想列」を参照)。
- RPG や C のプログラムに定義を記述する方法 (『LANSA テクニカル リファレンスガイド』の「仮想ロジック」を参照)。
- データベースのトリガー・ファンクションで作成する方法(「トリガー」を参照)。
タイプや長さの変換、日付から年齢への変換、実行時データ変換など、複雑な処理が必要な場合は、RPGやCで変換方法を定義する必要があります。
別のテーブルの列から仮想列を派生させたい場合については、「事前結合列の考え方」を参照してください。
次のトピックも参照してください。