DDS ファイルでのヌル可能フィールドの使用

フィールドが DDS で ALWNULL として定義される場合は、COPY DDS ステ ートメントはそのフィールドをコメント付きでヌル可能と識別します。例えば、下記の 2 つの図には、ヌル可能フィールドの入っている DDS ファイル、 およびこのフィールドが ILE COBOL プログラムの FILE-SECTION にコピーされるときにこれに対して作成される結果のコメントが示されています。

図 1. ヌル可能フィールドを示す DDS
 ....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....
      A* With the following physical file (TESTPF)
                 R TESTING
                   FLD1          5S 0
                   FLD2          8       ALWNULL
                   FLD3          6
図 2. ヌル可能 DDS ファイルの ILE COBOL プログラムへのコピー後の結果
* A COPY DDS-TESTING OF TESTPF.
*    I-O FORMAT:TESTING    FROM FILE TESTPF    OF LIBRARY QTEMP
*
     05  TESTING.
         06 FLD1                             PIC 9(5).
         06 FLD2                             PIC X(8).
                    (null-capable field)
         06 FLD3                             PIC X(6).

コピーされる DDS ヌル可能レコード形式のヌル・マップおよびヌル・キー・マップを生成するには、WITH NULL-MAP および WITH NULL-KEY-MAP 句 を作業用ストレージ・セクションまたはローカル・ストレージ・セクションで新規 COPY DDS ステートメント上に指定する必要があります。 DDS の形式当たり 1 つだけ NULL-MAP のコピーが生成されます。 例えば、形式に I (入力のみ) および B (入出力) の両方が含まれる場合、 生成されるヌル・マップのサイズは形式の中で指定されたすべてのフィールドに合うものです。 換言すれば、これには I および B のすべてのフィールドが含まれています。

特定形式用の DDS で定義されたヌル可能フィールドごとに、データ項目定義が生成されます。 生成されるデータ項目は、作業用ストレージ・セクションま たはローカル・ストレージ・セクションで COPY DDS ステートメント上 に NULL-MAP または NULL-MAP-ALPHANUM を指定するかどうかによって異なります。

NULL-MAP を指定した場合は、ヌル・マップが、2 進ゼロ (0) に初期設定される PIC 1 値を指定して作成されます。 以下のステートメントが、ヌル可能フィールドのソースで生成されます。
     06  <field-name>-NF     PIC 1  VALUE B"0".
フィールドがヌル可能でない場合は、FILLER 項目が生成されます。
NULL-MAP-ALPHANUM を指定した場合は、ヌル・マップが、文字ゼロ (0) に初期設定される PIC X 値を指定して作成されます。 以下のステートメントが、ヌル可能フィールドのソースで生成されます。
     06  <field-name>-NF     PIC X  VALUE ZERO.
フィールドがヌル可能でない場合は、以下のステートメントがソースで生成されます。
     06  <field-name>-AN     PIC X  VALUE ZERO.

NULL-MAP-ALPHANUM を使用して生成されたヌル・マップのサイズは、NULL-MAP を使用して生成されたヌル・マップのサイズと同じです。

図 3. 一部のフィールドがヌル可能でない DDS ファイル
 ....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....
      A* Physical file for DDS
                 R REC
                   FLD1          1A
                   FLD2          1A     ALWNULL
                   FLD3          1A
図 4. NULL-MAP を使用して COPY DDS から生成された ILE COBOL コード
*DDS Generated
  05 REC-NM
     06 FILLER          PIC X VALUE ZERO.
     06 FLD2–NF         PIC 1 VALUE B"0".
     06 FILLER          PIC X VALUE ZERO.