ここで、サンプルプログラムを使って、READCとSFLNXTCHGの関係を説明します。必ず、分かるはずです。
READCは例えば、500件のサブファイルレコードのオプション(WRKSPLFのオプションをイメージして下さい)の最後のレコードに何か入力した場合、CHAINでは500回サブファイルにアクセスします。でもREADCは1回しかアクセスしません。このパフォーマンスを利用しない手はありません。
2000-9-13追記
コラム:CHAINとREADCの違い
CHAIN命令は、全レコードを取り込んでしまう。もし、変更分だけ見るとすると、効率が悪い。データの追加の場合なら、問題ない。
READC命令は、システムにより管理された「変更」レコードのみ取り込むので、効率的。
|
ところが、READCを使っていると不可解なことが起きます。マニュアルはなんだか不親切で、私も最初は分かりませんでした。例えば、1回目のREADCをして、「EXFMTをせずに」2回目のREADCをすると、2回目はまったく引っかかりません。最初のREADCで入力検査をして、OKならそのまま、データ書き出しのプログラムがうまくいかないのです。
これは、DDSにSFLNXTCHGを指定しないためでした...
SFLNXTCHGがオフのままだと
日付: 10/04/97 【READC 処理検査】 時間: 12:05:49
SFLNXTCHG ON ( 1:ON 0:OFF) 0 ←
SEQ DO LOOP 1 DO LOOP 2 DO LOOP 3 DO LOOP 4 DO LOOP 5
1
2
3
4
X 5
6
7
8
9
10
F3 :終了 F5 :再表示 |
実行キー↓
日付: 10/04/97 【READC 処理検査】 時間: 12:05:53
SFLNXTCHG ON ( 1:ON 0:OFF) 0
SEQ DO LOOP 1 DO LOOP 2 DO LOOP 3 DO LOOP 4 DO LOOP 5
1
2
3
4
5 1 ←
6
7
8
9
10
F3 :終了 F5 :再表示 |
一回目の、READCのループでしか、サブファイルのレコードをゲットできていません。つまり、2回目以降は、まったくレコードをゲットできていません。このままでは、1回内容検査のつもりでREADCをしてしまうと、2回目、例えば、サブファイルへの入力のレコードを処理しようとREADCしても、何もしないままです。ところが、SFLNXTCHGをオンにすると、(SEQ
9に注目)
日付: 10/04/97 【READC 処理検査】 時間: 12:05:55
SFLNXTCHG ON ( 1:ON 0:OFF) 1 ←
SEQ DO LOOP 1 DO LOOP 2 DO LOOP 3 DO LOOP 4 DO LOOP 5
1
2
3
4
5 1
6
7
8
→ X 9
10
F3 :終了 F5 :再表示 |
実行キー↓
日付: 10/04/97 【READC 処理検査】 時間: 12:06:01
SFLNXTCHG ON ( 1:ON 0:OFF) 1
SEQ DO LOOP 1 DO LOOP 2 DO LOOP 3 DO LOOP 4 DO LOOP 5
1
2
3
4
5 1
6
7
8
→ 9 1 1 1 1 1
10
F3 :終了 F5 :再表示 |
SEQ9を見ると、ループ1から5まですべて、サブファイルレコードをゲットできています。つまり、第一回目のループでヒットしたサブファイルレコードをSFLNXTCHGをオンにして、
UPDATEすることで、READC命令でサブファイルレコードを継続して、ゲットできることがわかります。これは、とても重要です。以下にもう一度、実行キーを押した画面を載せます。SEQ9に注目して下さい。
日付: 10/04/97 【READC 処理検査】 時間: 12:06:02
SFLNXTCHG ON ( 1:ON 0:OFF) 1
SEQ DO LOOP 1 DO LOOP 2 DO LOOP 3 DO LOOP 4 DO LOOP 5
1
2
3
4
5 1
6
7
8
→ 9 2 2 2 2 2
10
F3 :終了 F5 :再表示 |
再び、SEQ9のレコードはゲットされています。
|