実フィールドと仮想フィールドの違い

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

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の値を更新してしまうので、仮想フィールドの内容をファイルに保存する必要はないのです。この性質が、状況によっては非常に役立ちます。

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

仮想フィールドの応用例

仮想フィールドの考え方