DEQUEUE

DEQUEUE プロシージャはメッセージをデキューします。署名は次のとおりです。

DEQUEUE(
  <queue_name> IN VARCHAR2,
  <dequeue_options> IN DBMS_AQ.DEQUEUE_OPTIONS_T,
  <message_properties> OUT DBMS_AQ.MESSAGE_PROPERTIES_T,
  <payload> OUT <type_name>,
  <msgid> OUT RAW)

Parameters

queue_name

既存のキューの名前(オプションでスキーマ修飾)。スキーマ名を省略すると、サーバーは SEARCH_PATH で指定されたスキーマを使用します。Oracleとは異なり、引用符で囲まれていない識別子は保存する前に小文字に変換されることに注意してください。特殊文字を含めるか、大文字と小文字を区別する名前を使用するには、名前を二重引用符で囲みます。

キューの作成の詳細については、 DBMS_AQADM.CREATE_QUEUE を参照してください。

dequeue_options

dequeue_options はタイプの値、 dequeue_options_t:

DEQUEUE_OPTIONS_T IS RECORD(
  consumer_name CHARACTER VARYING(30),
  dequeue_mode INTEGER,
  navigation INTEGER,
  visibility INTEGER,
  wait INTEGER,
  msgid BYTEA,
  correlation CHARACTER VARYING(128),
  deq_condition CHARACTER VARYING(4000),
  transformation CHARACTER VARYING(61),
  delivery_mode INTEGER);

現在、 dequeue_options_t でサポートされているパラメーター値は次のとおりです。

consumer_name

NULL でなければなりません。

dequeue_mode

デキュー操作のロック動作。次のいずれかでなければなりません:

DBMS_AQ.BROWSE –ロックを取得せずにメッセージを読み取ります。

DBMS_AQ.LOCKED –ロックを取得した後にメッセージを読み取ります。

DBMS_AQ.REMOVE –メッセージを削除する前にメッセージを読みます。

DBMS_AQ.REMOVE_NODATA –メッセージを読み取りますが、メッセージは削除しません。

navigation

取得されるメッセージを識別します。次のいずれかでなければなりません:

FIRST_MESSAGE –検索用語に一致するキュー内の最初のメッセージ。

NEXT_MESSAGE –最初の用語に一致する次の利用可能なメッセージ。

visibility

ON_COMMIT でなければなりません-現在のトランザクションをロールバックすると、デキューされたアイテムはキューに残ります。

wait

0より大きい数値でなければなりません。または:

DBMS_AQ.FOREVER –無期限に待機します。

DBMS_AQ.NO_WAIT –待たないでください。

msgid

デキューされるメッセージのメッセージID。

correlation

互換性のために受け入れられ、無視されます。

deq_condition

メッセージをデキューする必要があるかどうかを示す BOOLEAN 値に評価される VARCHAR2

transformation

互換性のために受け入れられ、無視されます。

delivery_mode

PERSISTENT でなければなりません。現時点では、バッファリングされたメッセージはサポートされていません。

message_properties

message_properties はタイプの値、 message_properties_t:

message_properties_t IS RECORD(
  priority INTEGER,
  delay INTEGER,
  expiration INTEGER,
  correlation CHARACTER VARYING(128) COLLATE pg_catalog.”C”,
  attempts INTEGER,
  recipient_list “AQ$_RECIPIENT_LIST_T”,
  exception_queue CHARACTER VARYING(61) COLLATE pg_catalog.”C”,
  enqueue_time TIMESTAMP WITHOUT TIME ZONE,
  state INTEGER,
  original_msgid BYTEA,
  transaction_group CHARACTER VARYING(30) COLLATE pg_catalog.”C”,
  delivery_mode INTEGER
DBMS_AQ.PERSISTENT);

message_properties_t でサポートされている値は次のとおりです。

priority

キューテーブル定義に優先度を参照する sort_list が含まれている場合、このパラメーターはメッセージがデキューされる順序に影響します。値が小さいほど、デキューの優先度が高くなります。

delay

メッセージをデキューまたは NO_DELAY に使用できるようになるまでの秒数を指定します。

expiration

expirationパラメーターを使用して、メッセージの有効期限が切れるまでの秒数を指定します。

correlation

相関を使用して、エントリに関連付けられるメッセージを指定します。デフォルトは NULL です。

attempts

これは、メッセージをデキューする試行回数を指定するシステム管理値です。

recipient_list

このパラメーターはサポートされていません。

exception_queue

exception_queue パラメータを使用して、メッセージの有効期限が切れたり、ロールバックが多すぎるトランザクションによってデキューされた場合に、メッセージの移動先となる例外キューの名前を指定します。

enqueue_time

enqueue_time は、レコードがキューに追加された時間です。この値はシステムによって提供されます。

state

このパラメーターは DBMS_AQ によって維持されます。状態は次のとおりです。 DBMS_AQ.WAITING –遅延に達していません。 DBMS_AQ.READY –キューエントリは処理の準備ができています。 DBMS_AQ.PROCESSED –キューエントリが処理されました。 DBMS_AQ.EXPIRED –キューエントリは例外キューに移動されました。

original_msgid

このパラメーターは互換性のために受け入れられ、無視されます。

transaction_group

このパラメーターは互換性のために受け入れられ、無視されます。

delivery_mode

このパラメーターはサポートされていません。 DBMS_AQ.PERSISTENT の値を指定します。

payload

payload パラメータを使用して、デキュー操作でメッセージのペイロードを取得します。ペイロードタイプは、キューテーブルの作成時に指定されたタイプと一致する必要があります。

msgid

msgid パラメーターを使用して、一意のメッセージ識別子を取得します。

Example

次の匿名ブロックは DBMS_AQ.DEQUEUE を呼び出し、キューおよびペイロードからメッセージを取得します。

DECLARE

  dequeue_options    DBMS_AQ.DEQUEUE_OPTIONS_T;
  message_properties DBMS_AQ.MESSAGE_PROPERTIES_T;
  message_handle     raw(16);
  payload            work_order;

BEGIN
  dequeue_options.dequeue_mode := DBMS_AQ.BROWSE;

  DBMS_AQ.DEQUEUE(
    queue_name         => 'work_queue',
    dequeue_options    => dequeue_options,
    message_properties => message_properties,
    payload            => payload,
    msgid              => message_handle
  );

  DBMS_OUTPUT.PUT_LINE(
  'The next work order is [' || payload.subject || '].'
  );
END;

ペイロードは DBMS_OUTPUT.PUT_LINE で表示されます。