7.20.2 DEF_ARRAY についてのコメント/警告

配列機能を適切に使用するには、IBM i における文字、パック 10 進数、および符号付き/ゾーン 10 進数のデータ保管形式について理解しておく必要があります。

配列を定義すると、ユーザー自身が DEFINE コマンドで定義したかのように、さまざまなフィールドが自動的にファンクションに定義されます。

RDMLX フィールドをオーバーレイすることはできません。また、RDMLX フィールドで他のフィールドをオーバーレイすることもできません。

以下の例では、#VAL01、#VAL02、および #VAL03 がすべて長さ 7 桁、小数点以下桁数 2 桁のパック 10 進数フィールドであるとします。

DEF_ARRAY NAME(#VAL) INDEXES(#II #JJ) OF_FIELDS(#VAL01 #VAL02 #VAL03)
 

これにより、以下の「フィールド」がファンクションに定義されます。

         CHANGE FIELD(#II) TO(3)
         SET_ERROR FOR_FIELD(#VAL#II)
 
         CHANGE FIELD(#JJ) TO(1)
         SET_ERROR FOR_FIELD(#VAL#JJ)
 
         DISPLAY FIELDS(#VAL01 #VAL02 #VAL03)
 

    上記のように指定した場合、SET_ERROR コマンドにより、フィールド #VAL01 および #VAL03 にエラー・フラグが設定されるため、これらのフィールドは反転表示されます。

             FETCH FIELDS(#VAL01) FROM_FILE(.....)
 
             および   CHANGE #II 1
             FETCH FIELDS(#VAL#II) FROM_FILE(.....)
 

#VAL#ARRAY という長さ 12 文字の文字フィールド。このフィールドでは、配列 #VAL が文字形式ですべて表されます。この場合、3 * P(7,2) では 12 バイトの記憶域が使用されます。このフィールドが自動的に定義されるのは、配列の長さの合計が 256 バイト以下の場合のみです。

この完全な配列フィールド #VAL#ARRAY は、以下の処理に使用できるため非常に便利です。