RPG

167. 特定のフィールドだけを更新するには ?

組み込み関数には興味深い機能を持つものもあって、ここに紹介する %FIELDS を使えば、
レコード中の特定のフィールドだけを更新することができる。
レコード中の一部のフィールドだけを更新したい場合は内部記述であれば簡単にできるが、
外部記述の場合はレコード単位での更新であるのでレコード中の一部、すわなち特定の
フィールドだけを更新することはできなかった。

ソースコード
-----------------------------------------------------------------------------
0001.00 C                   DO        *HIVAL
0002.00 C                   SETOFF                                       50
0003.00 C                   READ      BUHINM                                 50
0004.00 C   50              LEAVE
0005.00 C                   IF        BHKBN = '1'
0006.00 C                   EVAL      BHZKBN = '1'
0007.00 C                   EVAL      BHBASE = 5000
0008.00  /FREE
0009.00                     UPDATE    BUHINMR %FIELDS(BHZKBN:BHBASE);
0010.00  /END-FREE
0011.00 C                   END
0012.00 C                   END
-----------------------------------------------------------------------------
【 解説 】

部品マスター:BUHINMREAD 命令で読み取って部品区分:BHKBN が 1 であるレコード ( BUHINMR ) には
在庫区分:BHZKBN に 1 を入れて、基準在庫 BHBASE を5000 個に設定して 在庫区分:BHZKBN
基準在庫:BHBASE だけを UPDATE 命令で更新している。
ただし %FIELDS はフリー・フォーマットでしか使えないので/FREE 〜 /END-FREE によって
フリー・フォーマットを宣言している。
フリー・フォーマットの場合は命令文の最後には ; (セミコロン) が必要である。