組み込み関数には興味深い機能を持つものもあって、ここに紹介する %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 -----------------------------------------------------------------------------
【 解説 】
部品マスター:BUHINM
を READ
命令で読み取って部品区分:BHKBN
が 1 であるレコード ( BUHINMR
) には
在庫区分:BHZKBN
に 1 を入れて、基準在庫 BHBASE
を5000 個に設定して 在庫区分:BHZKBN
と
基準在庫:BHBASE
だけを UPDATE
命令で更新している。
ただし %FIELDS
はフリー・フォーマットでしか使えないので/FREE 〜 /END-FREE
によって
フリー・フォーマットを宣言している。
フリー・フォーマットの場合は命令文の最後には ;
(セミコロン) が必要である。