ヌル値可能フィールドの出力
ヌル値可能フィールドが外部記述ファイルに書き出される (出力 または更新) とき、ヌル値は、そのフィールドのヌル標識がその操作時にオンに 設定されている場合には書き出されます。
ヌル値可能フィールドが外部記述データベース・ファイルに出力される、
あるいはそのファイルで更新されるとき、そのフィールドがヌルであると、
バッファー内に置かれている値はデータ管理によって無視されます。
注: 出力時にオンになっているヌル標識を持つフィールドには、バッファーに転送
されるデータがあります。 これは、そのフィールドのヌル標識がオンになっている場合
でも、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