ee_dbq_skip
形式
ANSI C,C++の形式
#include <eedbq.h> int ee_dbq_skip(EEULONG skip_flg, EEULONG read_num, char *dbque_name, EELONG flags)
機能
DBキューのメッセージを読み出し済みにして,読み出しをスキップします。
メッセージを読み出し済みに更新するためのSQLの実行は,トランザクションの同期点処理内で行います。1トランザクションで複数のDBキューに対してこの関数を実行した場合は,API関数の実行順序に関係なく,DBキュー名の昇順にSQLを実行します。そのため,複数のDBキューに対してこの関数を実行するトランザクション間でこの関数の実行順序が異なっても,実行順序が原因でデッドロックすることはありません。
同一グローバルトランザクションのトランザクションブランチ間でこのAPI関数を実行すると,デッドロックが発生する場合があります。詳細は「注意事項」を参照してください。
UAPで値を設定する引数
●skip_flg
次のフラグを設定します。
- EEDBQ_SKIP_ALL
-
読み出し通番が書き込み通番と同じになるまで,すべてのメッセージを読み出し済みにします。
- EEDBQ_SKIP_ONE
-
未読み出しの先頭にある1メッセージだけを読み出し済みにします。
- EEDBQ_SKIP_NUM
-
read_numで設定された読み出し通番まで,メッセージを読み出し済みにします。
●read_num
メッセージ読み出し通番を設定します。
skip_flgでEEDBQ_SKIP_NUMを設定した場合に,この引数が有効になります。
●dbque_name
DBキュー名を27バイト以内のアスキー文字列で設定します。文字列の末尾にはNULL文字を付けてください。このNULL文字は文字列の長さに数えません。
●flags
EENOFLAGSを設定します。
リターン値
リターン値 |
意味 |
---|---|
EE_OK |
正常に終了しました。 |
EECOMER_CNDBPP |
オフラインバッチプロセスから発行しているため,この機能は使用できません。 |
EECOMER_CNDUOC |
UOCから発行しているため,この機能は使用できません。 |
EECOMER_ENVIRON |
TP1/EEの環境下にありません。 |
EEDBQER_ARGUMENT |
引数に設定した値が間違っています。 |
EEDBQER_CONDITION |
関数の呼び出し条件が不正です。 |
EEDBQER_MEMORY_SHORT |
メモリが不足しました。 |
EEDBQER_NO_DBQUE |
引数に設定したDBキュー名は存在しません。 |
EEDBQER_NO_LIBRARY |
DBキュー機能のライブラリがリンケージされていません。 |
EEDBQER_NO_OPTION |
DBキュー機能は使用できません。 |
EEDBQER_QUE_TYPE |
設定されたDBキューのタイプはDBキュー機能で使用できません。
|
EEDBQER_READ_NUM |
引数read_numに指定した値は不当な値です。 |
EEDBQER_RM_ACCESS |
リソースマネジャへのアクセス時にエラーが発生しました。 |
EEDBQER_RM_CONNECT |
該当するスレッドではリソースマネジャに接続されていません。 |
EEDBQER_ROLLBACK_RESERVE |
HiRDBの暗黙的ロールバックが発生したため,ee_trn_rollback_mark関数を呼び出しました。 |
EEDBQER_SKIPMSG_NOTHING |
この要求で読み出し済みにするメッセージはありません。 |
EEDBQER_STOP |
DBキューが使用できない状態です。 |
EEDBQER_TIMING |
このAPI関数を呼び出せる状態ではありません。
|
注意事項
-
スキップの対象になるのは,トランザクションのコミットによって書き込みが完了したメッセージです。コミットしていない場合は,メッセージをスキップできません。
-
メッセージ読み出し通番は,トランザクションのコミット時に更新されます。
-
メッセージをスキップしたあと,トランザクションのコミットまでは,さらにスキップすることはできません。
-
該当するDBキューが読み出し停止の状態(コマンド,TP1/EEサービス定義,API関数で指定するか,または障害発生による)にある場合だけ,メッセージをスキップできます。
-
同一グローバルトランザクションのトランザクションブランチ間で,同一DBキューに対してメッセージを書き込んだりスキップしたりすると,デッドロックが発生する場合があります。
-
DBキューの読み出しトランザクションで,該当するDBキューを読み出し停止状態にしている場合,メッセージをスキップできません。別のトランザクションでee_dbq_skip関数を呼び出すか,またはコマンドを実行してメッセージをスキップしてください。