RPG

470. フィールド単位で更新するには

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ではできないので念のため。