Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス COBOL言語編


CBLDCDAM('WRIT')

〈このページの構成〉

名称

論理ファイルへブロックの出力

形式

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 'WRIT'.
   02 データ名G  PIC X(1).
   02 FILLER    PIC X(1).
   02 FILLER    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).

機能

指定したブロックを出力します。ブロックを出力するタイミングを次に示します。

複数のブロックを一括して出力要求したときに,指定したブロックのうちで一つでもエラーになると,処理を中断してエラーリターンします。このときはブロックを出力しません。

論理ファイルへブロックを出力するときは,論理ファイル名と,CBLDCDAM('OPEN')で返されたファイル記述子を設定します。

UAPで値を設定するデータ領域

●データ名A

DAMファイルとのインタフェースコードを「VALUE 'DCDAMSVC'」と設定します。

●データ名C

論理ファイル名を8文字以内で設定します。8文字に満たない場合は,後ろを空白で埋めてください。

●データ名D

一意名3から一意名mの数(データ名Iとデータ名Jの組の数)を設定します。

●データ名E

出力データ長を設定します。出力データ長は(出力ブロック長×出力ブロック数)にしてください。

出力ブロック数とは,一意名3から一意名mの数(データ名Iとデータ名Jの組の数)で設定するブロック数の合計です。

●データ名H

論理ファイルをオープンしたときに返されたファイル記述子を設定します。

●データ名F

論理ファイルのブロック出力を示す要求コードを「VALUE 'WRIT'」と設定します。

●データ名G

排他エラーが起こったとき,排他解除待ちをするかどうかを設定します。

VALUE 'W' … 排他解除待ちをします。

VALUE 'N' … 待たないで,エラーリターンします。

VALUE SPACE… CBLDCDAM('OPEN')のデータ名Gに設定した値に従います。

「VALUE SPACE」を設定,または何も設定しなかった場合は次のようになります。

  • CBLDCDAM('OPEN')のデータ名Gに「VALUE 'W'」を設定していれば,排他解除待ちをします。

  • CBLDCDAM('OPEN')のデータ名Gに「VALUE 'N'」を設定,または省略している場合は待たないでエラーリターンします。

データ名Hに設定したファイル記述子のCBLDCDAM('OPEN')で,排他種別にファイル排他を設定していた場合は,ここに設定する値は意味を持ちません。

●データ名Z

0を設定します。

●データ名I

アクセスするブロックの,先頭の相対ブロック番号を設定します。

●データ名J

アクセスするブロックの,最後の相対ブロック番号を設定します。0を設定した場合は,データ名Iに設定した相対ブロック番号のブロックだけを出力します。

●データ名K

出力データ領域(バッファ)を設定します。

OpenTP1から値が返されるデータ領域

●データ名B

ステータスコードが,5けたの数字で返されます。

ステータスコード

ステータスコード

意味

00000

すべてのブロック出力は正常に終了しました。

01600

CBLDCRPC('OPEN ')を呼び出していません。

トランザクションの範囲外で,CBLDCDAM('WRIT')を呼び出しています(回復対象のDAMファイルにアクセスした場合だけリターンされます)。

ユーザサービス定義のatomic_updateオペランドの指定が'N'になっています(回復対象のDAMファイルにアクセスした場合だけリターンされます)。

CBLDCDAM('STRT')を呼び出していません

(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。

次に示すように,UAPを正しくリンケージしていません。

  • DAMサービスのAPIでTAMファイルにアクセスする場合に使うライブラリ(-ltdam)を,不当にリンケージしています。

  • トランザクション制御用オブジェクトファイルのリソースマネジャ登録が間違っています。

01602

排他エラーが起こりました。

01603

データ名Hに設定したファイル記述子は,正常にオープンして得られたファイル記述子ではありません。

DAMファイルをオープンしていません。

01604

出力データ長(出力ブロック長×出力ブロック数)が短過ぎます。

01605

DAMファイルにアクセスする順序が間違っています。

01606

相対ブロック番号が間違っています。

01607

メモリが不足しました。

01609

データ名Dに1より小さい値を設定しています。

01611

データ名Gに設定した値が間違っています。

01613

ブロック更新した回数が,DAMサービス定義の1トランザクションで更新できる最大ブロック数に指定した値を超えました

(回復対象のDAMファイルにアクセスした場合だけリターンされます)。

01620

出力エラーが起こりました

(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。

01621

指定したファイルが論理閉塞されています。

01622

指定したファイルが障害閉塞されています。

01628

アクセスしようとしたDAMファイルは,セキュリティ機能で保護されています。論理ファイルへブロックを出力しようとしたUAPには,アクセス権限がありません。

01629

トランザクションサービスでエラーが起こりました

(回復対象のDAMファイルにアクセスした場合だけリターンされます)。

01641

出力データ長(出力ブロック長×出力ブロック数)が長過ぎます。

01642

デッドロックが起こりました。

01643

ロックサービス定義で指定した待ち時間のタイムアウトのため,資源を確保できませんでした。

01645

最大同時排他要求数を超えて,排他要求されました。

01648

アクセスできる最大ブロック数を超えました

(回復対象外のDAMファイルにアクセスした場合だけリターンされます)。

01690

インタフェースコード(データ名A)が間違っています。

01691

要求コード(データ名F)が間違っています。

注※

詳細については,マニュアル「OpenTP1 システム定義」のDAMサービス定義のdam_update_blockオペランドを参照してください。

注意事項

ステータスコード「01613」「01648」が返された場合,次のどれかの方法で処置してください。

定義を変更する場合は,マニュアル「OpenTP1 システム定義」のDAMサービス定義のdam_update_blockオペランド,およびdam_update_block_overオペランドを参照し,注意事項を確認してください。