Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/Server Base Enterprise Option プログラム作成の手引


CBLEEDBQ('SKIP ')

〈このページの構成〉

名称

メッセージの読み出しスキップ

形式

PROCEDURE DIVISIONの指定

CALL 'CBLEEDBQ' USING 一意名1 一意名2 一意名3

DATA DIVISIONの指定

01 一意名1.
  02 データ名A  PIC X(8) VALUE 'SKIP    '.
  02 データ名B  PIC X(5).
  02 FILLER    PIC X(3).
  02 データ名C  PIC S9(9) COMP.
01 一意名2.
  02 データ名D  PIC X(1).
  02 データ名E  PIC X(28).
01 一意名3.
  02 データ名F  PIC 9(9) COMP-X.

機能

DBキューのメッセージを読み出し済みにして,読み出しをスキップします。

メッセージを読み出し済みに更新するためのSQLの実行は,トランザクションの同期点処理内で行います。1トランザクションで複数のDBキューに対してこの関数を実行した場合は,API関数の実行順序に関係なく,DBキュー名の昇順にSQLを実行します。そのため,複数のDBキューに対してこの関数を実行するトランザクション間でこの関数の実行順序が異なっても,実行順序が原因でデッドロックすることはありません。

同一グローバルトランザクションのトランザクションブランチ間でこのAPI関数を実行すると,デッドロックが発生する場合があります。詳細は「注意事項」を参照してください。

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

●データ名A

メッセージの読み出しスキップを示す要求コードを「VALUE 'SKIP△△△△'」と設定します。

●データ名C

0を設定します。

●データ名D

要求種別を設定します。

VALUE 'A'

読み出し通番が書き込み通番と同じになるまで,すべてのメッセージを読み出し済みにします。

VALUE 'O'

未読み出しの先頭にある1メッセージだけを読み出し済みにします。

VALUE 'N'

データ名Fで設定された読み出し通番まで,メッセージを読み出し済みにします。

●データ名E

DBキュー名を27バイト以内のアスキー文字列で設定します。文字列の末尾には空白を付けてください。この空白は文字列の長さに数えません。

●データ名F

メッセージ読み出し通番を設定します。

データ名DにVALUE 'N'を設定した場合は,1〜2147483647の値を設定してください。

データ名DにVALUE 'N'以外を設定した場合は,0を設定してください。

0以外を設定しても0として扱います。

TP1/EEから値が返されるデータ領域

●データ名B

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

ステータスコード

ステータスコード

意味

00000

正常に終了しました。

00001

TP1/EEの環境下にありません。

00004

UOCから発行しているため,この機能は使用できません。

00005

オフラインバッチプロセスから発行しているため,この機能は使用できません。

05601

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

05602

DBキュー機能は使用できません。

05603

この関数を呼び出せる状態ではありません。

  • 読み出し停止中ではありません。

  • 通番の初期化中です。

05604

データ名に設定したDBキュー名は存在しません。

05605

該当するスレッドではリソースマネジャに接続されていません。

05607

DBキューが使用できない状態です。

05608

メモリが不足しました。

05609

リソースマネジャへのアクセス時にエラーが発生しました。

05616

設定されたDBキューのタイプはDBキュー機能で使用できません。

  • 相手読み出しDBキュー

05620

データ名Fに指定した値は不当な値です。

05621

関数の呼び出し条件が不正です。

05623

DBキュー機能のライブラリがリンケージされていません。

05626

この要求で読み出し済みにするメッセージはありません。

05639

HiRDBの暗黙的ロールバックが発生したため,CBLEETRN('ROLLMARK')を呼び出しました。

注意事項

  1. スキップの対象になるのは,トランザクションのコミットによって書き込みが完了したメッセージです。コミットしていない場合は,メッセージをスキップできません。

  2. メッセージ読み出し通番は,トランザクションのコミット時に更新されます。

  3. メッセージをスキップしたあと,トランザクションのコミットまでは,さらにスキップすることはできません。

  4. 該当するDBキューが読み出し停止の状態(コマンド,TP1/EEサービス定義,関数で指定するか,または障害発生による)にある場合だけ,メッセージをスキップできます。

  5. 同一グローバルトランザクションのトランザクションブランチ間で,同一DBキューに対してメッセージを書き込んだりスキップしたりすると,デッドロックが発生する場合があります。

  6. DBキューの読み出しトランザクションで,該当するDBキューを読み出し停止状態にしている場合,メッセージをスキップできません。別のトランザクションでCBLEEDBQ('SKIP ')を呼び出すか,またはコマンドを実行してメッセージをスキップしてください。