DBMS_AQ
パッケージのストアドプロシージャを使用して、キューにメッセージを追加したり、キューからメッセージを削除したり、手続き型言語for SQL (PL/SQL) コールバックプロシージャを登録または登録解除したりできます。
PolarDBは、次のSQL文を使用して、
DBMS_AQ
パッケージの拡張機能も提供します。ALTER QUEUE
ALTER QUEUEテーブル
クエリの作成
キューテーブル
の作成ドロップキュー
ドロップキューテーブル
関数またはストアドプロシージャ | 戻り値タイプ | 説明 |
ENQUEUE | N/A | メッセージをキューに投稿します。 |
DEQUEUE | N/A | メッセージが使用可能な場合、またはメッセージが使用可能になった場合は、キューからメッセージを取得します。 |
REGISTER | N/A | コールバックプロシージャを登録します。 |
UNREGISTER | N/A | コールバックプロシージャの登録を解除します。 |
次の表に、PolarDBでサポートされる定数を示します。
定数 | 説明 | 適用パラメータ |
DBMS_AQ.BROWSE (0) | ロックせずにメッセージを読み取ります。 | dequeue_options_t.dequeue_mode |
DBMS_AQ.LOCKED (1) | PL/SQL定数パッケージの範囲内に収まる定数。 | dequeue_options_t.dequeue_mode |
DBMS_AQ.REMOVE (2) | 読み込まれたメッセージを削除します。 このパラメータはデフォルト値です。 | dequeue_options_t.dequeue_mode |
DBMS_AQ.REMOVE_NODATA (3) | PL/SQL定数パッケージの範囲内に収まる定数。 | dequeue_options_t.dequeue_mode |
DBMS_AQ.FIRST_MESSAGE (0) | 検索用語に一致する最初の利用可能なメッセージを返します。 | dequeue_options_t.navigation |
DBMS_AQ.NEXT_MESSAGE (1) | 検索用語に一致する次の利用可能なメッセージを返します。 | dequeue_options_t.navigation |
DBMS_AQ.NEXT_TRANSACTION (2) | PL/SQL定数パッケージの範囲内に収まる定数。 | dequeue_options_t.navigation |
DBMS_AQ.FOREVER (0) | 検索キーワードに一致するメッセージが見つからない場合は待機します。 このパラメータはデフォルト値です。 | dequeue_options_t.wait |
DBMS_AQ.NO_WAIT (1) | 検索キーワードに一致するメッセージが見つからない場合は待機しません。 | dequeue_options_t.wait |
DBMS_AQ.ON_COMMIT (0) | PL/SQL定数パッケージの範囲内に収まる定数。 | enqueue_options_t.visibility, dequeue_options_t.visibility |
DBMS_AQ.IMMEDIATE (1) | PL/SQL定数パッケージの範囲内に収まる定数。 | enqueue_options_t.visibility, dequeue_options_t.visibility |
DBMS_AQ.PERSISTENT (0) | メッセージはテーブルに保存する必要があります。 | enqueue_options_t.delivery_mode |
DBMS_AQ.BUFFERED (1) | PL/SQL定数パッケージの範囲内に収まる定数。 | enqueue_options_t.delivery_mode |
DBMS_AQ.READY (0) | メッセージを処理する準備ができていることを示します。 | message_properties_t.state |
DBMS_AQ.WAITING (1) | メッセージが処理待ちであることを示します。 | message_properties_t.state |
DBMS_AQ.PROCESSED (2) | メッセージが処理されたことを明示します。 | message_properties_t.state |
DBMS_AQ.EXPIRED (3) | メッセージが例外キューにあることを示します。 | message_properties_t.state |
DBMS_AQ.NO_DELAY (0) | PL/SQL定数パッケージの範囲内に収まる定数。 | message_properties_t.delay |
DBMS_AQ.NEVER (NULL) | PL/SQL定数パッケージの範囲内に収まる定数。 | message_properties_t.expiration |
DBMS_AQ.NAMESPACE_AQ (0) | DBMS_AQキューから通知を受信します。 | sys.aq$_reg_info.namespace |
DBMS_AQ.NAMESPACE_ANONYMOUS (1) | PL/SQL定数パッケージの範囲内に収まる定数。 | sys.aq$_reg_info.namespace |
ENQUEUE
ENQUEUE
ストアドプロシージャを使用して、エントリをキューに追加できます。 構文: ENQUEUE (
queue_name IN VARCHAR2,
enqueue_options IN DBMS_AQ.ENQUEUE_OPTIONS_T,
message_properties IN DBMS_AQ.MESSAGE_PROPERTIES_T,
payload IN <type_name>,
msgid OUT RAW)
Parameters
queue_name
既存のキューの名前。 この名前は、スキーマ修飾名とすることができる。説明- スキーマ名を省略した場合、サーバーはSEARCH_PATHで指定されたスキーマを使用します。
- 特殊文字を含めるか、大文字と小文字を区別する名前を使用するには、名前を二重引用符で囲みます。
enqueue_options
enqueue_options
は、enqueue_options_t
型の値です。
次の表に、DBMS_AQ.ENQUEUE_OPTIONS_Tは記録です ( visibility BINARY_INTEGER DEFAULT ON_COMMIT, relative_msgid RAW(16) DEFAULT NULL, sequence_deviation BINARY INTEGER DEFAULT NULL, transformation VARCHAR2(61) DEFAULT NULL, delivery_mode PLS_INTEGER NOT NULL DEFAULT PERSISTENT);
enqueue_options_t
でサポートされているパラメーター値のみを示します。パラメーター デフォルト値 visibility ON_COMMIT delivery_mode PERSISTENT sequence_deviation NULL transformation NULL relative_msgid NULL message_properties
message_properties
は、message_properties_t
型の値です。message_properties_tが記録されています ( priority INTEGER, delay INTEGER, expiration INTEGER, 相関文字VARYING(128) COLLATE pg_catalog."C" 、 attempts INTEGER, recipient_list"AQ$_RECIPIENT_LIST_T", exception_queue CHARACTER VARYING (61) pg_catalog."C" 、 enqueue_time TIMESTAMP WITHOUT TIME ZONE, state INTEGER, original_msgid BYTEA, transaction_group CHARACTER VARYING (30) pg_catalog."C" 、 delivery_mode INTEGER 次の表に、
message_properties_t
でサポートされている値を示します。パラメーター 説明 priority キューテーブル定義にpriorityを参照するsorte_listが含まれている場合、このパラメーターはメッセージがデキューされる順序に影響します。 値が小さいほど、デキューの優先順位が高くなります。 delay メッセージがデキューに使用できるようになるまでの秒数。 または、このパラメーターをNO_DELAYに設定できます。 expiration の項目は、要求の有効期限切れ時間を ISO 8601 GMT 時間形式で指定します。 メッセージの有効期限が切れるまでの秒数。 correlation エントリに関連付けられたメッセージ。 デフォルト値は NULL です。 attempts メッセージのデキューを試行した回数。 この値はシステムによって維持される。 exception_queue 例外キューの名前。 メッセージが期限切れになった場合、または何度もロールバックされたトランザクションによってデキューされた場合、メッセージはこのキューに移動されます。 enqueue_time ユーザーがプロジェクトに追加された時刻。 state このパラメーターは、DBMS_AQ によって維持されます。 有効な値: - DBMS_AQ.READY: キューエントリは遅延していません。
- DBMS_AQ.WAITING: キューエントリは処理の準備ができています。
- DBMS_AQ.PROCESSED:キューエントリが処理されました。
- DBMS_AQ.EXPIRED:キューエントリが例外キューに移動されました。
original_msgid このパラメーターは互換性のために使用され、無視できます。 transaction_group このパラメーターは互換性のために使用され、無視できます。 payload
payload
パラメーターを使用して、キューエントリに関連付けられているデータを提供できます。 ペイロードタイプは、対応するキューテーブルを作成するときに指定されたタイプと一致する必要があります。 詳細については、「CREATE_QUEUE_TABLE」をご参照ください。msgid
msgid
パラメーターを使用して、システムによって生成される一意のメッセージ識別子を取得できます。
例
次の匿名ブロックは、
DBMS_AQ.ENQUEUE
を呼び出して、work_orderという名前のキューにメッセージを追加します。
enqueue_options DBMS_AQ.ENQUEUE_OPTIONS_T;
message_properties DBMS_AQ.MESSAGE_PROPERTIES_T;
message_handle raw(16);
payload work_order;
開始
payload := work_order('Smith', 'system upgrade');
DBMS_AQ.ENQUEUE (
queue_name => 'work_order',
enqueue_options => enqueue_options,
message_properties => message_properties,
payload => payload,
msgid => message_handle
);
エンド;
DEQUEUE
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で指定されたスキーマを使用します。
- 特殊文字を含めるか、大文字と小文字を区別する名前を使用するには、名前を二重引用符で囲みます。
dequeue_options
dequeue_options
は、dequeue_options_t
型の値です。
次の表に、DEQUEUE_OPTIONS_Tが記録されています ( 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: waits indefinitely.
- DBMS_AQ.NO_WAIT: does not wait.
msgid デキューされるメッセージの ID。 correlation このパラメーターは互換性のために使用され、無視できます。 deq_condition BOOLEAN 値を計算し、メッセージをデキューする必要があるかどうかを指定するVARCHAR2 式。 transformation このパラメーターは互換性のために使用され、無視できます。 delivery_mode PERSISTENT である必要があります。 このモードでは、バッファー済みのメッセージはサポートされていません。 message_properties
message_properties
は、message_properties_t
型の値です。message_properties_tは記録されています ( priority INTEGER, delay INTEGER, expiration INTEGER, 相関文字VARYING(128) COLLATE pg_catalog."C" 、 attempts INTEGER, recipient_list"AQ$_RECIPIENT_LIST_T", exception_queue CHARACTER VARYING (61) pg_catalog."C" 、 enqueue_time TIMESTAMP WITHOUT TIME ZONE, state INTEGER, original_msgid BYTEA, transaction_group CHARACTER VARYING (30) pg_catalog."C" 、 delivery_mode INTEGER 次の表に、
message_properties_t
でサポートされている値を示します。パラメーター 説明 priority キューテーブル定義にpriorityを参照するsorte_listが含まれている場合、このパラメーターはメッセージがデキューされる順序に影響します。 値が小さいほど、デキューの優先順位が高くなります。 delay メッセージがデキュー可能になるまでに経過した秒数。 NO_DELAY 定数は、メッセージが利用可能になった直後にメッセージがデキューされることを指定します。 expiration の項目は、要求の有効期限切れ時間を ISO 8601 GMT 時間形式で指定します。 メッセージの有効期限が切れるまでの秒数。 correlation エントリに関連付けられたメッセージ。 デフォルト値は NULL です。 attempts メッセージのデキューを試行した回数。 この値はシステムによって維持される。 exception_queue 例外キューの名前。 メッセージが期限切れになった場合、または何度もロールバックされたトランザクションによってデキューされた場合、メッセージはこのキューに移動されます。 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
パラメーターを使用して、一意のメッセージ識別子を取得できます。
例
次の匿名ブロックは、
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;
開始
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
で表示されます。 登録
REGISTERストアドプロシージャを使用して、アイテムがエンキューまたはデキューされたときに通知を受信するために使用される電子メールアドレス、プロシージャ、またはURLを登録できます。 構文:
REGISTER (
reg_list IN SYS.AQ$_REG_INFO_LIST,
カウント数)
Parameters
reg_list
reg_list
パラメーターを使用して、AQ$_REG_INFO_list
タイプのリストを指定し、登録する各サブスクリプションに関する情報を提供します。 リスト内の各エントリのタイプはAQ$_REG_INFO
です。 各エントリに含めることができる属性を次の表に示します。属性 データ型 説明 name VARCHAR2 (128) サブスクリプションの名前。 この名前は、スキーマ修飾名とすることができる。 namespace NUMERIC 値はDBMS_AQ.NAMESPACE_AQ (0) である必要があります。 callback VARCHAR2 (4000) 通知時に実行されるアクションについて説明します。 PL/SQLストアドプロシージャのみがサポートされています。 プロシージャは、 plsql:// schema.procedure
の形式で呼び出されます。 次の項目は、このフォームのフィールドを説明します。- schemaフィールドは、ストアドプロシージャが存在するスキーマを指定する。
- プロシージャフィールドは、通知されるストアドプロシージャの名前を指定します。
context RAW (16) ストアドプロシージャに必要なユーザー定義の値。 カウント
count
パラメーターを使用して、reg_list
のエントリ数を指定できます。
例
次の匿名ブロックは、
DBMS_AQ.REGISTER
を呼び出して、アイテムがキューに追加またはキューから削除されたときに通知されるストアドプロシージャを登録します。 sys.aq$_reg_info
タイプの属性のセットは、DECLAREセクションで識別される各サブスクリプションに提供されます。DECLARE
subscription1 sys.aq$_reg_info;
subscription2 sys.aq$_reg_info;
subscription3 sys.aq$_reg_info;
subscriptionlist sys.aq$_reg_info_list;
開始
subscription1 := sys.aq$_reg_info('q' 、DBMS_AQ.NAMESPACE_AQ、'plsql:// assign_worker?PR=0 '、HEXTORAW ('FFF'));
subscription2 := sys.aq$_reg_info('q' 、DBMS_AQ.NAMESPACE_AQ、'plsql:// add_to_history?PR=1 '、HEXTORAW('FFFF'));
subscription3 := sys.aq$_reg_info('q' 、DBMS_AQ.NAMESPACE_AQ、'plsql:// reserve_parts?PR=2 '、HEXTORAW('FFFF'));
subscriptionlist := sys.aq$_reg_info_list(subscription1, subscription2, subscription3);
dbms_aq.register(subscriptionlist, 3);
commit;
END;
/
subscriptionlist
パラメーターを使用して、sys.aq$_reg_info_list
型のリストを指定し、記述されたsys.aq$_reg_info
オブジェクトを含みます。 リスト名とオブジェクト数がdbms_aq.register
に渡されます。 登録解除
UNREGISTER
ストアドプロシージャを使用して、エンキューおよびデキューに関連する通知を無効にできます。 構文: UNREGISTER (
reg_list IN SYS.AQ$_REG_INFO_LIST,
カウント
番号で)
Parameters
reg_list
reg_list
パラメーターを使用して、AQ$_REG_INFO_list
タイプのリストを指定し、登録する各サブスクリプションに関する情報を提供します。 リスト内の各エントリのタイプはAQ$_REG_INFO
です。 各エントリに含めることができる属性を次の表に示します。属性 データ型 説明 name VARCHAR2 (128) サブスクリプションの名前。 この名前は、スキーマ修飾名とすることができる。 namespace NUMERIC 値はDBMS_AQ.NAMESPACE_AQ (0) である必要があります。 callback VARCHAR2 (4000) 通知時に実行されるアクションについて説明します。 PL/SQLストアドプロシージャのみがサポートされています。 プロシージャは、 plsql:// schema.procedure
の形式で呼び出されます。 次の項目は、このフォームのフィールドを説明します。- schemaフィールドは、ストアドプロシージャが存在するスキーマを指定する。
- プロシージャフィールドは、通知されるストアドプロシージャの名前を指定します。
context RAW (16) ストアドプロシージャに必要なユーザー定義の値。 カウント
count
パラメーターを使用して、reg_list
のエントリ数を指定できます。
例
次の匿名ブロックは、DBMS_AQ.UNREGISTER
を呼び出して、DBMS_AQ.REGISTER
の例で指定されている通知を無効にします。
subscriptionlist
パラメーターを使用して、sys.aq$_reg_info_list
型のリストを指定し、記述されたsys.aq$_reg_info
オブジェクトを含みます。 リスト名とオブジェクト数がdbms_aq.unregister
に渡されます。 DECLARE
subscription1 sys.aq$_reg_info;
subscription2 sys.aq$_reg_info;
subscription3 sys.aq$_reg_info;
subscriptionlist sys.aq$_reg_info_list;
開始
subscription1 := sys.aq$_reg_info('q' 、DBMS_AQ.NAMESPACE_AQ、'plsql:// assign_worker?PR=0 '、HEXTORAW ('FFF'));
subscription2 := sys.aq$_reg_info('q' 、DBMS_AQ.NAMESPACE_AQ、'plsql:// add_to_history?PR=1 '、HEXTORAW('FFFF'));
subscription3 := sys.aq$_reg_info('q' 、DBMS_AQ.NAMESPACE_AQ、'plsql:// reserve_parts?PR=2 '、HEXTORAW('FFFF'));
subscriptionlist := sys.aq$_reg_info_list(subscription1, subscription2, subscription3);
dbms_aq.unregister(subscriptionlist, 3);
commit;
END;
/