ヌル値可能フィールドの出力

ヌル値可能フィールドが外部記述ファイルに書き出される (出力 または更新) とき、ヌル値は、そのフィールドのヌル標識がその操作時にオンに 設定されている場合には書き出されます。

ヌル値可能フィールドが外部記述データベース・ファイルに出力される、 あるいはそのファイルで更新されるとき、そのフィールドがヌルであると、 バッファー内に置かれている値はデータ管理によって無視されます。
注: 出力時にオンになっているヌル標識を持つフィールドには、バッファーに転送 されるデータがあります。 これは、そのフィールドのヌル標識がオンになっている場合 でも、10 進データ・エラーあるいは基底ポインターが設定されていない、 などのエラーが発生することを意味します。

外部記述データベース・ファイルへの出力命令中に、ファイルに、プログラム 内ではヌル値可能と見なされ、ファイル内ではヌル値可能でないと見なされている フィールドが含まれている場合、そのヌル値可能フィールドに関連のヌル標識 は使用されません。

ヌル可能フィールドを含むレコード様式が WRITE または UPDATE 命令で使用され、 結果フィールドでデータ構造がコーディングされる場合、 出力または更新レコードのヌル・バイト・マップを設定するためにそのデータ構造のサブフィールドのヌル属性が使用されます。

ヌル可能フィールドを含むレコード様式が、%FIELDS が指定された UPDATE 命令で使用される場合、 ヌル・バイト・マップ情報は、指定されたフィールドのヌル属性から入手されます。

図 1 は、ALWNULL(*USRCTL) オプションが使用されているときに、 ヌル値を含むレコードの読み取り、書き出し、更新がどのように行われるかを示したものです。

図 1. ヌル値可能フィールドの入力および出力
*..1....+....2....+....3....+....4....+....5....+....6....+....7....+....
 *
 *
 * Specify the ALWNULL(*USRCTL) keyword on a control
 * specification or compile the ILE RPG program with ALWNULL(*USRCTL)
 * on the command.
 *
HKeywords++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 *H ALWNULL(*USRCTL)
 *
 * DISKFILE contains a record REC which has 2 fields: FLD1 and FLD2
 * Both FLD1 and FLD2 are null-capable.
 *
FDISKFILE  UF A E             DISK
 *
 * Read the first record.
 * Update the record with new values for any fields which are not
 * null.
C                   READ      REC                                    10
C                   IF        NOT %NULLIND(Fld1)
C                   MOVE      'FLD1'        Fld1
C                   ENDIF
C                   IF        NOT %NULLIND(Fld2)
C                   MOVE      'FLD2'        Fld2
C                   ENDIF
C                   UPDATE    REC
 *
 * Read another record.
 * Update the record so that all fields are null.
 * There is no need to set the values of the fields because they
 * would be ignored.
C                   READ      REC                                    10
C                   EVAL      %NULLIND(Fld1) = *ON
C                   EVAL      %NULLIND(Fld2) = *ON
C                   UPDATE    REC
 *
 * Write a new record where Fld 1 is null and Fld 2 is not null.
 *
C                   EVAL      %NULLIND(Fld1) = *ON
C                   EVAL      %NULLIND(Fld2) = *OFF
C                   EVAL      Fld2 = 'New value'
C                   WRITE     REC