You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

[ |../../index.htm#lansa/l4wdev04_0280.htm]
現在地:

実列と仮想列の違い

実列と仮想列の違いは、次のような例を考えるとわかりやすいでしょう。
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の値を更新してしまうので、仮想列の内容をテーブルに保存する必要はないのです。この性質が、状況によっては非常に役立ちます。
次のトピックも参照してください。
仮想列の応用例
仮想列の考え方
[ |../../index.htm#lansa/l4wdev04_0280.htm]

  • No labels