現在地: Visual LANSA 開発者ガイド > 1. アプリケーション、フィールド、データベース、リポジトリの概要 > 1.6 アプリケーション・データベースの作成 > 実列と仮想列の違い
実列と仮想列の違い

実列と仮想列の違いは、次のような例を考えるとわかりやすいでしょう。

ACCMSTという口座テーブルがあり、そこに次のような、CHTACCという8桁の列があるとします。

       +---+---+---+---+---+---+---+---+

       | 0 | 8 | 6 | 3 | 4 | 3 | 1 | 2 |

       +---+---+---+---+---+---+---+---+

この例は口座番号が 08634312 の場合を示します。実際には、口座番号は次の 3 つの部分に分かれています。

1.  2 桁の企業番号 (08)

2.  2 桁の部門番号 (63)

3.  4 桁の原価部門番号 (4312)

企業番号、部門番号、原価部門番号とも、口座番号から直接求められるので、COMPNO、DIVNUM、COSTCTという仮想列を定義することを考えてもよさそうです。

するとACCMSTテーブルは次のような定義になります。

英数字の長さ

CHTACCという「実」列

8

COMPNOという「仮想」列

2

DIVNUMという「仮想」列

2

COSTCTという「仮想」列

4

 

もちろんこれだけでは充分でありません。各「仮想」列が、実列であるCHTACCからどのように「派生」するかを定義する必要があります。

この場合、定義方法には次の2通りがあります。

この例の場合、実列CHTACCの部分文字列を抽出する「仮想列の拡張定義」ファンクションで実現するか、または文字列の分割処理をRPG/400で記述することになります。

実際に定義すると、COMPNO、DIVNUM、COSTCTの各列がACCMSTテーブルに存在するようになります。もちろんこれはそう見えるだけであって、実際に物理的な列があるわけではありません。「仮想」列と呼ばれるのはこのためです。

これらの仮想列は、ACCMSTテーブルからデータを読み込む際にのみ使います。テーブルに対する書き込み/更新時には使われません。

その直前に、3つの値を連結してCHTACCの値を更新してしまうので、仮想列の内容をテーブルに保存する必要はないのです。この性質が、状況によっては非常に役立ちます。

次のトピックも参照してください。

仮想列の応用例

仮想列の考え方