169 DBMS_STREAMS_MESSAGING
DBMS_STREAMS_MESSAGING
パッケージは、Oracle Streamsパッケージ・セットの1つであり、ANYDATA
キューにメッセージをエンキューおよびデキューするインタフェースを提供しています。
この章のトピックは、次のとおりです:
169.1 DBMS_STREAMS_MESSAGINGの概要
このパッケージは、ANYDATA
キューへのメッセージのエンキューおよびデキューを行うインタフェースを提供します。
ノート:
現在、メッセージ・クライアントはバッファに入れたメッセージをデキューできません。また、DBMS_STREAMS_MESSAGING
パッケージを使用してバッファ・キューにメッセージをエンキューしたり、バッファ・キューからメッセージをデキューすることはできません。ただし、DBMS_AQ
パッケージを使用して、バッファに入れられたメッセージをエンキューおよびデキューできます。
参照:
キュー、メッセージおよびDBMS_AQ
パッケージの詳細は、『Oracle Databaseアドバンスト・キューイング・ユーザーズ・ガイド』を参照してください。
169.2 DBMS_STREAMS_MESSAGINGのセキュリティ・モデル
このパッケージのセキュリティは、選択したユーザーまたはロールにこのパッケージのEXECUTE
権限を付与するか、選択したユーザーまたはロールにEXECUTE_CATALOG_ROLE
を付与することで制御できます。
パッケージのサブプログラムをストアド・プロシージャ内から実行する場合、そのサブプログラムを実行するユーザーには、パッケージのEXECUTE
権限を直接付与する必要があります。ロールを通して付与することはできません。
このパッケージ内のサブプログラムを実行するユーザーが必要な権限を所有するには、Oracle Streams管理者を構成し、このパッケージを使用するときにOracle Streams管理者として接続します。
参照:
Oracle Streams管理者の構成の詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。
169.3 DBMS_STREAMS_MESSAGINGサブプログラムの要約
この表は、DBMS_STREAMS_MESSAGING
サブプログラムを示し、簡単に説明しています。
表169-1 DBMS_STREAMS_MESSAGINGパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
指定したOracle Streamsメッセージ・クライアントを使用して、指定したキューからメッセージをデキューします。 |
|
現在のユーザーが指定したキューにメッセージをエンキューします。 |
ノート:
このパッケージのサブプログラムはコミットしません。
169.3.1 DEQUEUEプロシージャ
このプロシージャは、指定したOracle Streamsメッセージ・クライアントを使用して、指定したキューからメッセージをデキューします。
このプロシージャはオーバーロードされています。このプロシージャの一方のバージョンには、msgid OUT
パラメータがあり、他方のバージョンにはこのパラメータがありません。
構文
DBMS_STREAMS_MESSAGING.DEQUEUE( queue_name IN VARCHAR2, streams_name IN VARCHAR2, payload OUT ANYDATA, dequeue_mode IN VARCHAR2 DEFAULT 'REMOVE', navigation IN VARCHAR2 DEFAULT 'NEXT MESSAGE', wait IN BINARY_INTEGER DEFAULT FOREVER, msgid OUT RAW); DBMS_STREAMS_MESSAGING.DEQUEUE( queue_name IN VARCHAR2, streams_name IN VARCHAR2, payload OUT ANYDATA, dequeue_mode IN VARCHAR2 DEFAULT 'REMOVE', navigation IN VARCHAR2 DEFAULT 'NEXT MESSAGE', wait IN BINARY_INTEGER DEFAULT FOREVER);
パラメータ
表169-2 DEQUEUEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
メッセージをデキューするローカル・キューの名前で、 たとえば、 |
|
Oracle Streamsメッセージ・クライアントの名前。たとえば、ユーザー このパラメータが |
|
デキューするペイロード。 |
|
次のいずれかの設定を指定します。
|
|
取り出されるメッセージの位置。最初に位置が判断されます。次に検索基準が適用されます。最後にメッセージが取り出されます。 次のいずれかの設定を指定します。
ノート: 各メッセージ・グループには、単一のトランザクションのメッセージが含まれます。 関連項目: デキュー・オプションの詳細は、『Oracle Databaseアドバンスト・キューイング・ユーザーズ・ガイド』を参照してください。 |
|
|
|
デキューするメッセージのメッセージID。 |
例外
表169-3 DEQUEUEプロシージャの例外
例外 | 説明 |
---|---|
|
デキューは現在のトランザクションの最後のメッセージに達しました。この例外は次のように指定します。 SYS.DBMS_STREAMS_MESSAGING.ENDOFCURTRANS すべてのデキュー・プロシージャに、この例外を処理する例外ハンドラを含める必要があります。 |
|
キュー内にデキュー操作の対象となるメッセージがありません。この例外は次のように指定します。 SYS.DBMS_STREAMS_MESSAGING.NOMOREMSGS
|
169.3.2 ENQUEUEプロシージャ
このプロシージャを使用して、現在のユーザーが指定したキューにメッセージをエンキューできます。
このプロシージャはオーバーロードされています。このプロシージャの一方のバージョンには、msgid
OUT
パラメータがあり、他方のバージョンにはこのパラメータがありません。
構文
DBMS_STREAMS_MESSAGING.ENQUEUE( queue_name IN VARCHAR2, payload IN ANYDATA, msgid OUT RAW); DBMS_STREAMS_MESSAGING.ENQUEUE( queue_name IN VARCHAR2, payload IN ANYDATA);
パラメータ
表169-4 ENQUEUEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
メッセージをエンキューするローカル・キューの名前で、 たとえば、 |
|
エンキューするペイロード。 |
|
エンキューするメッセージのメッセージID。 |
使用上のノート
メッセージを正しくキューにエンキューするには、現在のユーザーを現在のユーザーと同じ名前で、一意のアドバンスト・キューイング・エージェントにマップする必要があります。DBMS_STREAMS_ADM.SET_UP_QUEUE
プロシージャを実行し、ユーザーをキュー・ユーザーとして指定して、エンキューの実行に必要な権限をユーザーに付与できます。SET_UP_QUEUE
を実行し、キュー・ユーザーを指定すると、アドバンスト・キューイング・エージェントが自動的に作成されます。