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)

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

また、RANGECHECK や SET_ERROR などのデータ妥当性検査コマンドから #VAL#II または #VAL#JJ を参照すると、関連付けられた OF_FIELD フィールドにエラーが設定されます。

例:

   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 は、以下の処理に使用できるため非常に便利です。