他のレコードを再定義するレコードの宣言

他のレコードによって宣言されているメモリー領域を再定義するレコードを宣言したい場合があります。 例えば、ある検索と次の検索で取り出すデータの構造が異なる場合、次のように、 シリアル・ファイルからデータ域を次々に読み取るループを記述することができます。
Record RecordA type SerialRecord
   { fileName = "myFile" }
   record_type char(1);
   item1 char(20); 
end

Record RecordB type BasicRecord
   10 record_type char(1);
   10 item2 bigint;
   10 item3 decimal(7);
   10 item4 char(8);
end

Program ProgramX type basicProgram
   myRecordA RecordA;
   myRecordB RecordB {redefines = "myRecordA"};
   
   function main();
     get myRecordA;
     while (myRecordA not endOfFile)
       if (myRecordA.record_type == "A")
         myFunction01(myRecordA.item1);
       else
         myFunction02(myRecordB.item2, myRecordB.item3, myRecordB.item4);
       end
       get myRecordA;
     end
   end
end
このループ内で、関数は以下のように動作します。
  1. 入力レコードの最初のフィールドで、残りのデータの構造を示すコードを確認する。
  2. その入力レコードまたは 2 番目の基本レコードのいずれかを使用して、 取り出されたデータの他のフィールドを処理する。2 番目のレコードは、入力レコードと同じメモリー領域を参照しますが、構造が異なります。

あるレコードを他のレコードの再定義として宣言するには、redefines プロパティーを使用します。 このプロパティーは、他のレコードを識別するストリングを受け入れます。このプロパティーは、 レコード宣言でのみ使用することができます。 レコード・パーツ定義では使用できません。

オリジナルのレコードおよびオーバーレイ・レコードには任意の型の固定レコードを使用することができますが、 以下の制限事項があります。

オーバーレイ・レコードには、オリジナルのレコードに含まれている情報 (構造を除く) は含まれません。 例えば、索引付レコードでシリアル・レコードを再定義することはできますが、 索引付レコードによってアクセスされるファイルは、シリアル・レコード・パーツではなく、 索引付レコード・パーツで識別されます。

関連概念
EGL での変数の参照

関連概念
EGL での変数と定数の宣言

関連リファレンス
SQL レコードの内部レイアウト

フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.