最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

13.7.CLPでSETLL+READのやり方

[ Previous ] [ HOME ] [ Upper ] [ Next ]


CLPで、ファイルの順次処理ができるのは、割と皆さんご存知ですよね。まあ、念のため、説明しますと、

 

PGM
DCLF ABCFILE
OVRDBF ABCFILE   QTEMP/ABCFILE
READ:
RCVF *N ABCFILE
MONMSG CPF0000 *N GOTO END
....
GOTO READ
END:
DLTOVR ABCFILE
RETURN
ENDPGM

という感じですね。

ポイント

ところで、どのタイミングで、ファイルオープンしているかご存知ですか?

CLPが呼び出された直後ではないです。暗黙のオープンは、最初のRCVFで行われます。したがって、その前にメンバー指定(まあ、メンバーが1個しかないのが多いので、たいていは、ファイル指定になりますが)は、その前で行えばいいのです。

 

最初の RCVF コマンドが処理された時点で、ファイルは入力専用としてオ ープンされる。この時点では、ファイルおよびそのメンバーが存在してい なければなりません。

AS/400e CL プログラミング V4: 5.2 文書番号: SD88-5038-02    (C) Copyright IBM Corp. 1997, 1999

さて、そのメンバー指定を踏まえて考えると、OVRDBFの他のパラメータも、同じタイミングで使えそうですね。

0001.00 PGM  (&MDY)                                                             
0002.00  DCL  &MDY  *CHAR   6                                                   
0003.00  DCL  &YY   *CHAR   2                                                   
0004.00  DCL  &MM   *CHAR   2                                                   
0005.00  DCL  &DD   *CHAR   2                                                   
0006.00  DCLF  XXXXXX                                                    
0007.00  MONMSG  CPF0000  *N   GOTO END                                        
0008.00                                                                         
0009.00     OVRDBF XXXXXX POSITION( *KEYAE 3 RCDFMT &MDY )                        
0010.00                                                                         
0011.00  RCVF:                                                                  
0012.00                                                                         
0013.00     RCVF                                                                
0014.00     CHGVAR   &YY   &DDDLYY                                              
0015.00     CHGVAR   &MM   &CMCLMM                                              
0016.00     CHGVAR   &DD   &CMCLDD                                              
0017.00     SNDPGMMSG  MSG(&YY||&MM||&DD)                                       
0018.00     GOTO RCVF                                                           
0019.00                                                                         
0020.00 END:
0021.00 ENDPGM	 

 

上記の例は、指定された月日年&MDYをキーとして、ファイルに位置付けをして、RCVFで読み込んでいます。また、キーフィールドは3つあります。

*KEYの場合、RPGのSETLLと違い、キーが存在しない場合は、エラーを出します。(CPF4137)これは、RPGで言うところのCHAIN命令とおなじですね。

さて、このPOSITIONの中身は、AS/400の操作援助が詳しいです。

キー操作の値として次のいずれか1つを指定してください。 

*KEYB (前のキー) 

残りの検索値(フィールドの数,レコード様式名,およびキーの値)により識別されたレコードより1つ前のレコードが最初に読み取られるレコードです。 

*KEYBE (前または等しいキー) 

検索値により識別されたレコードが最初に読み取られるレコードです。それらの値に対応するレコードがない場合には,それらの値に最も近い前のレコードが選択されます。 

*KEY (等しいキー) 

検索値により識別されたレコードが最初に読み取られるレコードです。プログラムに前のレコード読取り操作が指定されている場合には,前のレコードが読み取られます。 

*KEYAE (後または等しいキー) 

検索値によって識別されたレコードが最初に読み取られるレコードです。それらの値に対応するレコードがない場合には,次の最高値のレコードが選択されます。 

*KEYA (後のキー) 

残りの検索値(フィールドの数,レコード様式名,およびキーの値)により識別されたレコードの後のレコードが最初に読み取られるレコードです。 

次のように他の検索値を指定してください。 

フィールドの数 

検索に使用するためのキー・フィールドの数を指定します。指定するフィールドの数は,ファイル用の各キーのフィールドの実際の数と同じである必要はありません。たとえば, *KEY 1 FMT1 A を指定した場合には,最初のキー・フィールドにAの値をもつファイル様式 FMT1 の最初のレコードが読み取られます。キーの値ゼロを指定した場合には,すべてのキー・フィールドに基づいて検索が行なわれます。ゼロを使用した場合には,キーの値には,最大キー・サイズが入れられ,使用しない場合には,一致は起こりません。 

レコード様式名 

指定されたキーの値が含まれているデータベース・ファイルのレコード様式の名前を指定します。レコード様式の名前が指定されていない場合には,他の検索値と一致する最初のレコードのためにすべてのレコード様式が検索されます。 

キーの値 

最初に読み取るレコードを指定します。キーの値は,文字または正のゾーン10 進数形式のアポストロフィで囲まれた文字ストリングとして指定するか,あるいは 16 進数形式 (X' 値 ') で指定します。文字ストリングには最大 2000 桁までを指定することができます。 

たとえば, POSITION(*KEY 1 FMT2 X'123F') は,次のことを指定します。 

1. システムがレコード様式 FMT2 からレコードを検索します。
2. 1つのキー・フィールドが検索に使用されます(キーの値に多数のキー・フィールドがあっても)。
3. レコードに 16 進数値 123F (パック 10 進数値 123.0 の 16 進数等価)が入っています。見つかった時に,このレコードが表示されます。 

DDM ファイルといっしょに POSITION パラメーターを使用する影響についてはDISTRIBUTED DATA MANAGEMENT (SC41-5307) に詳細があります。 

2002/3/3


[ Previous ] [ HOME ] [ Upper ] [ Next ]

You are at K's tips-n-kicks of AS/400

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送