RPGでレコードを更新する場合はレコード単位で更新するものと
思われているが実は組込み関数 : %FIELDS を使えば
フィールドを指定してフィールド単位で更新することができる。
0001.00 H DFTNAME(TESTFLD) DATEDIT(*YMD/) BNDDIR('QC2LE')
0002.00 F********** 効果的な組込み関数 %FIELDS の使い方 **************************
0003.00 FSHOHIN UF E K DISK
0004.00 F**********************************************************************
0005.00
0006.00 * CRTBNDRPG PGM(OBJLIB/TESTFLD) SRCFILE(SRCLIB/QRPGLESRC) DFTACTGRP(*NO)
0007.00 * ACTGRP(*NEW) DBGVIEW(*SOURCE) AUT(*ALL)
0008.00
0009.00 /FREE
0010.00 UPDATE SHOHINR %FIELDS(SHTANK);
0011.00 /END-FREE
0012.00 C SETON LR
0013.00 C RETURN
【解説】
UPDATE (レコード名) %FIELDS(フィールド名1: フィールド名2: … )
のようにして更新したいフィールド名だけを個別に指定して更新することができる。
在庫数だけを更新したいのにレコード全体を更新するのは不用意に
誤った別のフィールドも更新してしまうミスに繋がりかねない。
フィールド単位での更新を指定しておけば後からのRPGソースの読み手にも
更新の意図が伝わりやすい。
フィールド単位での更新が本来のあるべき姿でもある。
もちろんこのようなフィールド別の更新はRPG IIIではできないので念のため。