3

PL/SQL プログラムから DBMS_AQ.DEQUEUE を呼び出しています。永遠に待ちたくはありませんが、キューにデータがない場合は、デキューを再試行する前に定期的にタイムアウトします。DEQUEUE プロシージャのOracle ドキュメントには、タイムアウトの指定方法が明確に記載されています (dequeue_options の待機フィールドを使用)。ただし、タイムアウトの場合に何が起こるかについては言及していません。

ドキュメントでタイムアウトのケースの処理方法を指定することを期待していましたが、それを見落としたか、ドキュメントの見落としであるか、明らかなはずであり、PL/SQLの経験が不足しているため、方法がわかりません。いずれにせよ、DEQUEUE タイムアウトを最適に処理/キャッチする方法についてのアドバイスをいただければ幸いです。

4

1 に答える 1

2

これに対する答えを探している他の人にとって、これは私が求めていたものです(ninesidedのコメントに感謝します):

begin
  dbms_aq.dequeue(
    payload            => payload
   ,queue_name         => queue_name
   ,dequeue_options    => deq_opt
   ,message_properties => msg_prty
   ,msgid              => msgid
  );
exception
  when others then
    if sqlcode = -25228 then
      -- handle timeout here
    end if;
end;
于 2015-12-04T07:27:08.373 に答える