Oracle と互換性のある PolarDB データベースは、メッセージのキューとメッセージ処理を提供しています。 ユーザー定義メッセージはキューに格納されています。 キューのコレクションは、キューテーブルに格納されています。 DBMS_AQADM パッケージのプロシージャを使用して、メッセージのキューとキューテーブルを作成および管理することができます。 DBMS_AQ パッケージを使用して、キューにメッセージを追加したり、キューからメッセージを削除したり、PL/SQL コールバックプロシージャを登録または登録解除したりすることができます。

Oracle と互換性のある PolarDB データベースは、次の SQL コマンドを実行することにより、DBMS_AQ パッケージに互換性のない拡張機能も提供しています。

  • ALTER QUEUE
  • ALTER QUEUE TABLE
  • CREATE QUEUE
  • CREATE QUEUE TABLE
  • DROP QUEUE
  • DROP QUEUE TABLE

DBMS_AQADM パッケージは、キューとキューテーブルを作成および管理できるストアドプロシージャを提供しています。

関数/手順 戻り値の型 説明
ALTER_QUEUE N/A 既存のキューを変更します。
ALTER_QUEUE_TABLE N/A 既存のキューテーブルを変更します。
CREATE_QUEUE N/A Creates a queue.
CREATE_QUEUE_TABLE N/A キューテーブルを作成します。
DROP_QUEUE N/A 既存のキューを削除します。
DROP_QUEUE_TABLE N/A 既存のキューテーブルを削除します。
PURGE_QUEUE_TABLE N/A キューテーブルから 1 つ以上のメッセージを削除します。
START_QUEUE N/A キューをエンキュープロシージャでおよびデキュープロシージャで使用できるようにします。
STOP_QUEUE N/A キューをエンキュープロシージャでおよびデキュープロシージャで使用できないようにします。

Oracle と互換性のある PolarDB データベースでの DBMS_AQADM の実装は、ネイティブ Oracle と比較すると部分的な実装です。 上記の表にリストされている関数とプロシージャのみがサポートされています。

次の表に、Oracle と互換性のある PolarDB データベースでサポートされている定数を示します。

定数 説明 適用パラメーター
DBMS_AQADM.TRANSACTIONAL(1) この定数が定義されています。 この定数を使用すると、エラーメッセージが返されます。 message_grouping
DBMS_AQADM.NONE(0) キューテーブルのメッセージのグループ化を指定します。 message_grouping
DBMS_AQADM.NORMAL_QUEUE(0) create_queue とともに使用して、queue_type を指定します。 queue_type
DBMS_AQADM.EXCEPTION_QUEUE (1) create_queue とともに使用して、queue_type を指定します。 queue_type
DBMS_AQADM.INFINITE(-1) create_queue と共に使用して、retention_time を指定します。 retention_time
DBMS_AQADM.PERSISTENT (0) メッセージはテーブルに保存する必要があります。 enqueue_options_t.delivery_mode
DBMS_AQADM.BUFFERED (1) この定数が定義されています。 この定数を使用すると、エラーメッセージが返されます。 enqueue_options_t.delivery_mode
DBMS_AQADM.PERSISTENT_OR_BUFFERED (2) この定数が定義されています。 この定数を使用すると、エラーメッセージが返されます。 enqueue_options_t.delivery_mode

ALTER_QUEUE

ALTER_QUEUE プロシージャを使用して、既存のキューを変更することができます。 プロシージャには次の署名があります。

ALTER_QUEUE(
  max_retries IN NUMBER DEFAULT NULL,
  retry_delay IN NUMBER DEFAULT 0
  retention_time IN NUMBER DEFAULT 0,
  auto_commit IN BOOLEAN DEFAULT TRUE)
  comment IN VARCHAR2 DEFAULT NULL,

パラメーター

パラメーター 説明
queue_name 新しいキューの名前です。
max_retries DEQUEUE 文でメッセージが削除されるまでに許容される失敗した試行の最大数です。 max_retries の値は、各 ROLLBACK 文で増分されます。 失敗した試行の数が max_retries で指定された値に達すると、メッセージは例外キューに移動されます。 0 の値は、再試行が許可されないことを意味します。
retry_delay 再処理のためのロールバックとメッセージスケジュールの間に経過した秒数です。 0 の値は、メッセージをすぐに再処理する必要があることを意味します。 これがデフォルト値です。
retention_time メッセージのデキューと保存の間に経過した秒数です。 0 の値は、メッセージがデキューされた後に保持できないことを意味します。 INFINITE の値は、メッセージが永久に保持されることを意味します。 デフォルト値は 0 です。
auto_commit このパラメーターは無視されますが、互換性のために含まれています。
comment キューに関連付けられたコメントです。

次のコマンドを使用して、work_order という名前のキューを変更し、retry_delay パラメーターを 5 秒に設定します。

EXEC DBMS_AQADM.ALTER_QUEUE(queue_name => 'work_order', retry_delay => 5);

ALTER_QUEUE_TABLE

ALTER_QUEUE_TABLE プロシージャを使用して、既存のキューテーブルを変更することができます。 プロシージャには次の署名があります。

ALTER_QUEUE_TABLE (
  queue_table IN VARCHAR2,
  comment IN VARCHAR2 DEFAULT NULL,
  primary_instance IN BINARY_INTEGER DEFAULT 0,
  secondary_instance IN BINARY_INTEGER DEFAULT 0,

パラメーター

パラメーター 説明
queue_table キューテーブルの名前です。 これはスキーマで修飾された名前の場合があります。
comment キューテーブルに関するコメントです。
primary_instance このパラメーターは無視されますが、互換性のために含まれています。
secondary_instance このパラメーターは無視されますが、互換性のために含まれています。

次のコマンドは、work_order_table という名前のキューテーブルを変更するために使用されます。

EXEC DBMS_AQADM.ALTER_QUEUE_TABLE
      (queue_table => 'work_order_table', comment => 'This queue table contains work orders for the shipping department.') ;

キューテーブルの名前は work_order_table です。 このコマンドは、キューテーブルの定義にコメントを追加するために使用されます。

CREATE_QUEUE

CREATE_QUEUE プロシージャを使用して、既存のキューテーブルにキューを作成することができます。 プロシージャには次の署名があります。

CREATE_QUEUE(
  queue_name IN VARCHAR2
  queue_table IN VARCHAR2,
  queue_type IN BINARY_INTEGER DEFAULT NORMAL_QUEUE,
  max_retries IN NUMBER DEFAULT 5,
  retry_delay IN NUMBER DEFAULT 0
  retention_time IN NUMBER DEFAULT 0,
  dependency_tracking IN BOOLEAN DEFAULT FALSE,
  comment IN VARCHAR2 DEFAULT NULL,
  auto_commit IN BOOLEAN DEFAULT TRUE)

パラメーター

パラメーター 説明
queue_name 新しいキューの名前です。
queue_table 新しいキューが配置されているテーブルの名前です。
queue_type 新しいキューの型。 有効値:
  • DBMS_AQADM.NORMAL_QUEUE: 通常のキュー。 これがデフォルト値です。
  • DBMS_AQADM.EXCEPTION_QUEUE: 例外キュー。 例外キューは、デキュー操作のみをサポートしています。
max_retries DEQUEUE 文でメッセージが削除されるまでに許容される失敗した試行の最大数です。 max_retries の値は、各 ROLLBACK 文で増分されます。 失敗した試行の数が max_retries で指定された値に達すると、メッセージは例外キューに移動されます。 システムテーブルのデフォルト値は 0 です。 ユーザー定義テーブルのデフォルト値は 5 です。
retry_delay 再処理のためのロールバックとメッセージスケジューリングの間に経過した秒数です。 0 の値は、メッセージをすぐに再処理する必要があることを意味します。 これがデフォルト値です。
retention_time メッセージのデキューと保存の間に経過した秒数です。 0 の値は、メッセージがデキューされた後に保持できないことを意味します。 INFINITE の値は、メッセージが永久に保持されることを意味します。 デフォルト値は 0 です。
dependency_tracking このパラメーターは無視されますが、互換性のために含まれています。
comment キューに関連付けられたコメントです。
auto_commit このパラメーターは無視されますが、互換性のために含まれています。

次の匿名ブロックは、work_order_table テーブルに work_order という名前のキューを作成するために使用されます。

BEGIN
DBMS_AQADM.CREATE_QUEUE ( queue_name => 'work_order', queue_table => 'work_order_table', comment => 'This queue contains pending work orders.') ;
END;

CREATE_QUEUE_TABLE

CREATE_QUEUE_TABLE プロシージャを使用して、キューテーブルを作成することができます。 プロシージャには次の署名があります。

CREATE_QUEUE_TABLE (
  queue_table IN VARCHAR2,
  queue_payload_type IN VARCHAR2,
  storage_clause IN VARCHAR2 DEFAULT NULL,
  sort_list IN VARCHAR2 DEFAULT NULL,
  multiple_consumers IN BOOLEAN DEFAULT FALSE,
  message_grouping IN BINARY_INTEGER DEFAULT NONE,
  comment IN VARCHAR2 DEFAULT NULL,
  auto_commit IN BOOLEAN DEFAULT TRUE,
  primary_instance IN BINARY_INTEGER DEFAULT 0,
  secondary_instance IN BINARY_INTEGER DEFAULT 0,
  compatible IN VARCHAR2 DEFAULT NULL,
  secure IN BOOLEAN DEFAULT FALSE)

パラメーター

パラメーター 説明
queue_table キューテーブルの名前です。 これはスキーマで修飾された名前の場合があります。
queue_payload_type キューテーブルに格納されるデータのユーザー定義タイプです。 RAW f データ型を指定するには、RAW 型を識別するユーザー定義型を作成する必要があります。
storage_clause キューテーブルの属性を指定します。 TABLESPACE オプションのみが適用されます。 他のすべてのオプションは無視されますが、互換性のために含まれています。 TABLESPACE 句を使用して、テーブルが作成されるテーブルスペースの名前を指定することができます。
  • storage_clause は、次のオプションの 1 つ以上に設定することができます。

    TABLESPACE tablespace_name、PCTFREE integer、PCTUSED integer、INITRANS integer、MAXTRANS integer、および STORAGE storage_option。

  • storage_option は、次のオプションの 1 つ以上に設定することができます。

    MINEXTENTS 整数、MAXEXTENTS 整数、PCTINCREASE 整数、INITIAL size_clause、NEXT、FREELISTS 整数、OPTIMAL size_clause、および BUFFER_POOL {KEEP | RECYCLE | DEFAULT}。

sort_list このパラメーターは、キューのデキュー順序を制御し、キューを昇順でソートするために使用される列の名前を指定します。 enq_time と優先順位の次の組み合わせがサポートされています。
  • enq_time, priority
  • priority, enq_time
  • priority
  • enq_time
multiple_consumers このパラメーターは、必要に応じて FALSE に設定する必要があります。
message_grouping このパラメーターは、必要に応じて NONE に設定する必要があります。
comment キューテーブルに関するコメントです。
auto_commit このパラメーターは無視されますが、互換性のために含まれています。
primary_instance このパラメーターは無視されますが、互換性のために含まれています。
secondary_instance このパラメーターは無視されますが、互換性のために含まれています。
compatible このパラメーターは無視されますが、互換性のために含まれています。
secure このパラメーターは無視されますが、互換性のために含まれています。

次の匿名ブロックは、VARCHAR2 名と TEXT プロジェクトの説明を保持する属性を持つ work_order 型を作成するために使用されます。 ブロックはこの型を使用してキューテーブルを作成します。

BEGIN

CREATE TYPE work_order AS (name VARCHAR2, project TEXT, completed BOOLEAN);

EXEC DBMS_AQADM.CREATE_QUEUE_TABLE
      (queue_table => 'work_order_table',
       queue_payload_type => 'work_order',
       comment => 'Work order message queue table');
END;

キューテーブルの名前は work_order_table で、work_order 型のペイロードが含まれています。 これが作業指示メッセージキューテーブルであることを示すコメントが追加されます。

DROP_QUEUE

DROP_QUEUE プロシージャを使用して、キューを削除することができます。 プロシージャには次の署名があります。

DROP_QUEUE(
  queue_name  IN VARCHAR2,
  auto_commit IN BOOLEAN DEFAULT TRUE)

パラメーター

パラメーター 説明
queue_name 削除するキューの名前です。
auto_commit このパラメーターは無視されますが、互換性のために含まれています。

次の匿名ブロックは、work_order という名前のキューを削除します。

BEGIN
DBMS_AQADM.DROP_QUEUE(queue_name => 'work_order');
END;

DROP_QUEUE_TABLE

DROP_QUEUE_TABLE プロシージャを使用して、キューテーブルを削除することができます。 プロシージャには次の署名があります。

DROP_QUEUE_TABLE(
  queue_table IN VARCHAR2,
  force IN BOOLEAN default FALSE,
  auto_commit IN BOOLEAN default TRUE)

パラメーター

パラメーター 説明
queue_table キューテーブルの名前です。 これはスキーマで修飾された名前の場合があります。
force force キーワードは、コマンドを使用してエントリを含むテーブルを削除するときの DROP_QUEUE_TABLE コマンドの動作を指定します。
  • ターゲットテーブルにエントリが含まれ、force が FALSE に設定されている場合、コマンドは失敗し、エラーメッセージが返されます。
  • ターゲットテーブルにエントリがあり、force が TRUE に設定されている場合、コマンドはテーブルとすべての依存オブジェクトを削除します。
auto_commit このパラメーターは無視されますが、互換性のために含まれています。

次の匿名ブロックは、work_order_table という名前のテーブルを削除するために使用されます。

BEGIN
   DBMS_AQADM.DROP_QUEUE_TABLE ('work_order_table', force => TRUE);
END;

PURGE_QUEUE_TABLE

PURGE_QUEUE_TABLE プロシージャを使用して、キューテーブルからメッセージを削除することができます。 プロシージャには次の署名があります。

PURGE_QUEUE_TABLE(
  queue_table IN VARCHAR2,
  purge_condition IN VARCHAR2,
  purge_options IN aq$_purge_options_t)

パラメーター

パラメーター 説明
queue_table メッセージを削除するキューテーブルの名前です。
purge_condition サーバーが削除するメッセージを決定するときにサーバーが評価する条件として指定します。 条件は SQL WHERE 句で指定されます。
purge_options aq$_purge_options_t 型のオブジェクトです。 aq$_purge_options_t オブジェクトには、特定の属性が含まれています。 詳細については、「表 1」をご参照ください。
表 1. aq$_purge_options_t
属性 データ型 説明
Block Boolean TRUE の値は、テーブル内のすべてのキューで排他ロックを保持する必要があることを意味します。 デフォルト値は FALSE です。
delivery_mode INTEGER 削除するオブジェクトの名前です。 サポートされている唯一の値は dbms_aq.percent です。

次の匿名ブロックは、completed という名前の列の値が YES である work_order_table からメッセージを削除するために使用されます。

DECLARE
   purge_options dbms_aqadm.aq$_purge_options_t;
BEGIN
   dbms_aqadm.purge_queue_table('work_order_table', 'completed = YES', purge_options);
  END;

START_QUEUE

START_QUEUE プロシージャを使用すると、キューをエンキューおよびデキューできるようになります。 プロシージャには次の署名があります。

START_QUEUE(
  queue_name IN VARCHAR2,
  enqueue IN BOOLEAN DEFAULT TRUE,
  dequeue IN BOOLEAN DEFAULT TRUE)

パラメーター

パラメーター 説明
queue_name 開始するキューの名前です。
enqueue TRUE の値は、エンキューが有効であることを意味します。 FALSE の値は、現在の設定が変更されていないことを意味します。 デフォルト値は TRUE です。
dequeue TRUE の値は、デキューが有効であることを意味します。 FALSE の値は、現在の設定が変更されていないことを意味します。 デフォルト値は TRUE です。

次の匿名ブロックは、work_order という名前のキューをエンキューに使用できるようにするために使用されます。

BEGIN
DBMS_AQADM.START_QUEUE
(queue_name => 'work_order);
END;

STOP_QUEUE

STOP_QUEUE プロシージャを使用して、指定したキューのエンキューまたはデキューを無効化することができます。 プロシージャには次の署名があります。

STOP_QUEUE(
  queue_name IN VARCHAR2,
  enqueue IN BOOLEAN DEFAULT TRUE,
  dequeue IN BOOLEAN DEFAULT TRUE,
  wait IN BOOLEAN DEFAULT TRUE)

パラメーター

パラメーター 説明
queue_name 登録するデバイスの名前を指定します。
enqueue TRUE の値は、エンキューが無効であることを意味します。 FALSE の値は、現在の設定が変更されていないことを意味します。 デフォルト値は TRUE です。
dequeue TRUE の値は、デキューが無効であることを意味します。 FALSE の値は、現在の設定が変更されていないことを意味します。 デフォルト値は TRUE です。
wait TRUE の値は、サーバーが未完了のトランザクションが完了するのを待ってから、サーバーが指定された変更を適用することを意味します。 サーバーがキューの停止を待機している場合には、指定されたキューにトランザクションをエンキューまたはデキューすることはできません。 値が FALSE の場合には、キューはすぐに停止します。

次の匿名ブロックを使用して、work_order という名前のキューへのエンキューとデキューを無効にします。

BEGIN
DBMS_AQADM.STOP_QUEUE(queue_name =>'work_order', enqueue=>TRUE, dequeue=>TRUE, wait=>TRUE);
END;

未処理のトランザクションがすべて完了すると、エンキューとデキューが停止します。