1

1 つの VSAM ファイルを読み取る 1 つの COBOL pgm を実行しています。以下は、私のpgmの入出力セクションです。

ファイル制御。

 SELECT INPUT-FILE         ASSIGN TO DDINPUT             
                           ORGANIZATION IS INDEXED           
                           ACCESS MODE  IS RANDOM            
                           RECORD KEY   IS INPUT-KEY                                
                           FILE STATUS  IS WS-INPUT-STATUS.

FD エントリは次のとおりです。

ファイルセクション。

FD INPUT-FILE IS EXTERNAL (これはサブ pgm にあるため)
COPY INPUTREC.

この pgm を実行すると、ファイル ステータス コード =04 で失敗しました。どこかで、ファイルが VB であっても FD にレコードが 1 つしかない場合、それは FB として扱われることがわかりました。したがって、FB にはレコードを含むか、Varying 句が必要です。

FDをに更新したとき。

ファイルセクション。

FD INPUT-FILE は、
サイズが 1 から 215 まで変化する外部レコードです。INPLAYOUT をコピーします。

仕事はうまくいきました。

1 つ疑問があります。この Varying 句を最大長に指定できますか。たとえば、RECORD VARYING IN SIZE FROM 1 TO 2500 のように記述した場合、何か問題が発生しますか?

4

2 に答える 2

5

VSAM ファイルが適切に初期化されており、JCL がプログラム要件と一貫してコーディングされていると仮定すると、問題は発生しません。

VARYING 句は、予期される最大レコード サイズに対してバッファー内に十分なスペースを予約するように COBOL に指示するだけであり、I/O 呼び出しごとにサイズが異なると予想されるレコードがファイルに含まれていることを示します。FB (固定ブロック) であった場合、COBOL はレコードが一定のサイズであると想定し、レコードが想定されたサイズから逸脱すると、ステータス コード 04 をトリガーします。VB (Variable Block) の場合、レコード サイズが VARYING で定義された最大制限を超えると、リターン コード 04 が発生する可能性があります。

個人的には、COBOL の I/O ステータス条件を理解するのはやや難解です。

以下は ANSI COBOL I/O ステータス コードの表で、ファイル I/O デバッグの目的で手元に置いておきます。

0x - Successful Completion
00 - No futher information
02 - Duplicate Key detected
04 - Wrong Length Record
05 - File created when opened.  With sequential VSAM 00 is returned.
07 - CLOSE with NO REWIND or REEL for non-tape dataset.

1x - End of File conditions
10 - No futher information
14 - Relative record READ outside boundry.

2x - Invalid Key condition
21 - Sequence Error
22 - Duplicate Key
23 - No Record found
24 - Key outside boundry

3x - Permanent I/O Errors
30 - No further information
34 - Record outside file boundry
35 - OPEN and required file not found.
37 - OPEN with invalid mode
38 - OPEN of file closed with a LOCK
39 - OPEN unsuccessful due to conflicting file attributes

4x - Logic Errors
41 - OPEN of file already open
42 - CLOSE of file not open
43 - READ  not executed before REWRITE
44 - REWRITE of different size record
46 - READ after EOF reached
47 - READ attempted for file not opened I-O or EXTEND
48 - WRITE for file not opened OUTPUT, I-O, or EXTEND
49 - DELETE or REWRITE for file not opened I-O

9x - Specific Compiler defined exceptions
90 - No further information
91 - VSAM Password failure
92 - Logic Error
93 - VSAM Resource unavailable
94 - VSAM Sequence record not available
95 - VSAM invalid or incomplete file information
96 - VSAM no DD statement
97 - VSAM OPEN successful, file integrity verified.
于 2011-09-07T11:53:19.810 に答える
1

可変レコード レイアウト ファイルを読み取る COBOL プログラムは、ファイル ステータス コード 004 を返しました。

ファイル ステータス コードを 04 にしたコード:

FD  XXXXX-FILE                                 
RECORDING MODE IS V                        
BLOCK CONTAINS 0 RECORDS
LABEL RECORDS STANDARD.   

VARYING 句を指定した後、ファイル ステータス コードは 00 です。

FD  XXXXX-FILE             
RECORDING MODE IS V    
RECORD IS VARYING IN SIZE FROM 01 TO 2598
BLOCK CONTAINS 0 RECORDS
LABEL RECORDS STANDARD.
于 2011-11-09T09:12:51.850 に答える