CBLDCDAM('READ')
- 〈このページの構成〉
形式
PROCEDURE DIVISIONの指定
CALL 'CBLDCDAM' USING 一意名1 一意名2 一意名n
DATA DIVISIONの指定
01 一意名1. 02 データ名A PIC X(8) VALUE 'DCDAMSVC'. 02 データ名B PIC X(5). 02 FILLER PIC X(3). 02 データ名C PIC X(8). 02 データ名D PIC S9(9) COMP. 02 データ名E PIC S9(9) COMP. 02 データ名H PIC S9(9) COMP. 02 FILLER PIC X(28). 01 一意名2. 02 データ名F PIC X(4) VALUE 'READ'. 02 データ名G PIC X(1). 02 データ名L PIC X(1). 02 データ名M PIC X(1). 02 FILLER PIC X(1). 02 データ名Z PIC S9(9) COMP VALUE ZERO. 02 一意名3. 03 データ名I PIC S9(9) COMP. 03 データ名J PIC S9(9) COMP. 02 一意名4. 03 データ名I PIC S9(9) COMP. 03 データ名J PIC S9(9) COMP. : : 02 一意名m. 03 データ名I PIC S9(9) COMP. 03 データ名J PIC S9(9) COMP. 01 一意名n. 02 データ名K PIC X(n).
機能
指定した論理ファイルから,指定した範囲のブロックを,参照または更新目的で入力します。
-
回復対象のDAMファイルの場合
論理ファイルをオープンしたときの設定に従ってブロック排他をします。
トランザクションの範囲でない処理からでも,論理ファイルからブロックを入力できます。ただし,参照目的の入力に限り,排他の指定はできません。
複数のブロック番号の設定で入力の要求をした場合は,それらのブロックのうちで一つでもエラーが起こると,入力バッファにはブロックを入力しないでエラーを返します。このとき要求があったすべてのブロック排他は解放されます。
参照目的で入力したあとに,同じブロックに対して更新目的での入力要求をした場合に,この更新目的での入力でエラーが起こると,参照目的での入力の排他も解除されます。
トランザクション途中でブロックを更新する指定(DAMサービス定義のdam_update_block_over=flush)があっても,次のような場合には,ステータスコード「01613」でエラーリターンする場合があります。
-
一つのトランザクションブランチの中でDAMファイルのブロックを更新(REWRITE)しないで,更新目的のブロック入力(READ)を呼び出して,そのブロック数が一括更新最大ブロック数(DAMサービス定義のdam_update_blockの値)を超えた場合。
回復対象のDAMファイルのブロックを入力する場合は,トランザクションの範囲内からCBLDCDAM('READ')を呼び出してください。
-
-
回復対象外のDAMファイルの場合
回復対象外のDAMファイルのブロックを入力する場合は,CBLDCDAM('READ')を呼び出す条件に制限はありません。
回復対象外のDAMファイルに対して,DAMサービス定義のdam_update_blockに指定した値を超えて,更新目的で論理ファイルのブロックを入力した場合は,ステータスコード「01648」でエラーリターンします。
論理ファイルのブロックを入力するときは,論理ファイル名と,CBLDCDAM('OPEN')で返されたファイル記述子を設定します。
UAPで値を設定するデータ領域
●データ名A
DAMファイルとのインタフェースコードを「VALUE 'DCDAMSVC'」と設定します。
●データ名C
論理ファイル名を8文字以内で設定します。8文字に満たない場合は,後ろを空白で埋めてください。
●データ名D
一意名3から一意名mの数(データ名Iとデータ名Jの組の数)を設定します。
●データ名E
入力バッファ長を設定します。入力バッファ長は(入力ブロック数×入力ブロック長)以上にしてください。
入力ブロック数とは,一意名3から一意名mの数(データ名Iとデータ名Jの組の数)で設定するブロック数の合計です。
●データ名H
論理ファイルをオープンしたときに返されたファイル記述子を設定します。
●データ名F
論理ファイルのブロック入力を示す要求コードを「VALUE 'READ'」と設定します。
●データ名G
入力要求の種別を,次のどちらかで設定します。必ずどちらか一方を設定してください。
VALUE 'R'…参照目的の入力
VALUE 'M'…更新目的の入力
●データ名L
参照目的の入力の場合,排他を掛けるかどうかを指定します。'E'を設定した場合は,同期点の処理まで排他を掛けます。
排他を掛けないで論理ファイルのブロックを入力した場合,入力処理中にほかのトランザクションから該当するブロックが更新されることがあります。この場合,入力するブロックの内容は,ほかのトランザクションでの更新処理の状態に依存します。よって,最新のブロックの内容を参照する場合には,必ず'E'を指定してください。
更新目的の入力の場合は,空白を設定します。空白以外の値を設定しても無視されます。
VALUE 'E'…排他をします。
VALUE 'N'…排他をしません。
トランザクションの外から回復対象のDAMファイルに参照目的でアクセスする場合は,排他する指定はできません。
データ名Gに「VALUE 'M'」を設定した場合は,データ名Lに' '(空白)を設定してください。
●データ名M
排他エラーが起こったとき,排他解除待ちをするかどうかを設定します。データ名Lに「VALUE 'N'」を設定した場合は,データ名Mに' '(空白)を設定してください。
VALUE 'W' … 排他解除待ちをします。
VALUE 'N' … 待たないで,エラーリターンします。
VALUE SPACE… CBLDCDAM('OPEN')のデータ名Gに設定した値に従います。
「VALUE SPACE」を設定,または何も設定しなかった場合は次のようになります。
-
CBLDCDAM('OPEN')のデータ名Gに「VALUE 'W'」を設定していれば,排他解除待ちをします。
-
CBLDCDAM('OPEN')のデータ名Gに「VALUE 'N'」を設定,または省略している場合は待たないでエラーリターンします。
データ名Hに設定したファイル記述子のCBLDCDAM('OPEN')で,排他種別にファイル排他を設定していた場合は,ここに設定する値は意味を持ちません。
データ名G,データ名L,データ名Mに設定した値と,排他の設定内容の対応を次に示します。
データ名G |
データ名L※1 |
データ名M※2 |
排他の設定内容 |
---|---|---|---|
'R' |
'E' |
'W' |
参照目的,排他あり,排他エラー時は解除待ち |
'N' |
参照目的,排他あり,排他エラー時はエラーリターン |
||
'N' |
△ |
参照目的,排他なし※3 |
|
'M' |
△ |
'W' |
更新目的,排他エラー時は解除待ち |
'N' |
更新目的,排他エラー時はエラーリターン |
●データ名I
アクセスするブロックの,先頭の相対ブロック番号を設定します。
●データ名J
アクセスするブロックの,最後の相対ブロック番号を設定します。0を設定した場合は,データ名Iで設定した相対ブロック番号のブロックだけを入力します。
●データ名K
入力データ領域を設定します。
●データ名Z
0を設定します。
OpenTP1から値が返されるデータ領域
●データ名B
ステータスコードが,5けたの数字で返されます。
ステータスコード
ステータスコード |
意味 |
---|---|
00000 |
すべてのブロック入力は正常に終了しました。 |
01600 |
CBLDCRPC('OPEN ')を呼び出していません。 |
トランザクションの範囲外で,更新目的の入力,または排他を指定した参照目的の入力をしています(回復対象のDAMファイルにアクセスした場合だけリターンされます)。 |
|
ユーザサービス定義のatomic_updateオペランドの指定が'N'になっています(回復対象のDAMファイルにアクセスした場合だけリターンされます)。 |
|
CBLDCDAM('STRT')を呼び出していません (回復対象外のDAMファイルにアクセスした場合だけリターンされます)。 |
|
次に示すように,UAPを正しくリンケージしていません。
|
|
01602 |
排他エラーが起こりました。 |
01603 |
データ名Hに設定したファイル記述子は,正常にオープンして得られたファイル記述子ではありません。 |
DAMファイルをオープンしていません。 |
|
01604 |
入力バッファ長に設定した長さが,すべてのブロックを入力するためには不十分です。 |
01606 |
相対ブロック番号が間違っています。 |
01607 |
メモリが不足しました。 |
01609 |
データ名Dに1より小さい値を設定しています。 |
01611 |
データ名Gまたはデータ名Lに設定した値が間違っています。 |
01613 |
ブロック更新した回数※が,DAMサービス定義の1トランザクションで更新できる最大ブロック数に指定した値を超えました。 |
01618 |
UAPが,現在稼働しているDAMサービスでは動作できないバージョンのDAMライブラリと結合されています。 |
01620 |
入力エラーが起こりました。 |
01621 |
指定したファイルが論理閉塞されています。 |
01622 |
指定したファイルが障害閉塞されています。 |
01628 |
アクセスしようとしたDAMファイルは,セキュリティ機能で保護されています。論理ファイルのブロックを入力しようとしたUAPには,アクセス権限がありません。 |
01629 |
トランザクションサービスでエラーが起こりました (回復対象のDAMファイルにアクセスした場合だけリターンされます)。 |
01642 |
デッドロックが起こりました。 |
01643 |
ロックサービス定義で指定した待ち時間のタイムアウトのため,資源を確保できませんでした。 |
01645 |
最大同時排他要求数を超えて,排他要求されました。 |
01648 |
回復対象外のDAMファイルにアクセスできるブロック数※を超えました (回復対象外のDAMファイルにアクセスした場合だけリターンされます)。 |
01690 |
インタフェースコード(データ名A)が間違っています。 |
01691 |
要求コード(データ名F)が間違っています。 |
注意事項
ステータスコード「01613」「01648」が返された場合,次のどれかの方法で処置してください。
-
DAMサービス定義のdam_update_blockオペランドの指定値を大きくする。
-
DAMサービス定義のdam_update_block_overオペランドにerrorを指定して「01613」となった場合,dam_update_block_overオペランドの指定をflushに変更する。
-
更新目的で入力するブロック数をDAMサービス定義のdam_update_blockオペランドの指定値以下にする。
定義を変更する場合は,マニュアル「OpenTP1 システム定義」のDAMサービス定義のdam_update_blockオペランド,およびdam_update_block_overオペランドを参照し,注意事項を確認してください。