创建新的队列表

语法

CREATE QUEUE TABLE name OF type_name [ ( { option_name option_value } [, ... ] ) ]

其中 option_name 和对应的 option_value 可以是:

option_name option_value
SORT_LIST priority, enq_time
MULTIPLE_CONSUMERS FALSE, TRUE
MESSAGE_GROUPING NONE, TRANSACTIONAL
STORAGE_CLAUSE TABLESPACE tablespace_name、PCTFREE integer、PCTUSED integer、INITRANS integer、MAXTRANS integer、STORAGE storage_option

其中 storage_option 为以下一个或多个值:

MINEXTENTS integer、MAXEXTENTS integer、PCTINCREASE integer、INITIAL size_clause、NEXT、FREELISTS integer、OPTIMAL size_clause、BUFFER_POOL {KEEP|RECYCLE|DEFAULT}。

说明 只强制执行 TABLESPACE 选项;为了实现兼容性而支持其他所有选项,不过忽略它们。可使用 TABLESPACE 子句指定将在其中创建表的表空间的名称。

说明

CREATE QUEUE TABLE 允许超级用户或具有 aq_administrator_role 特权的用户创建新的队列表。

如果对 CREATE QUEUE TABLE 的调用包含 schema 名称,则在指定的 schema 中创建队列表。如果未提供 schema 名称,则在当前 schema 中创建新的队列表。

队列表名称必须唯一,不同于相同 schema 中其他任何队列表的名称。

参数

参数 说明
name 新队列表的名称(可能是 schema 限定的)。
type_name 描述队列表中每个条目的有效负载的现有类型的名称。有关定义类型的信息,请参阅 CREATE TYPE。
option_name option_value 将与新队列表关联的任何选项的名称,以及该选项对应的值。如果对 CREATE QUEUE TABLE 的调用包含重复的选项名称,则服务器将返回错误。接受以下值:
表 1. option_name和option_value可选值列表
参数 说明
SORT_LIST 可使用 SORT_LIST 选项控制队列的出队顺序,并指定将用于对队列进行排序(升序)的列名称。当前接受的值为 enq_time 和 priority 的以下组合:
  • enq_time. priority
  • priority. enq_time
  • priority
  • enq_time
  • 其他任何值都将返回 ERROR。
MULTIPLE_CONSUMERS BOOLEAN 值,指示消息可以具有多名使用者 (TRUE),或限定每个消息只有一名使用者 (FALSE)。
MESSAGE_GROUPING 指定 none 以指示每个消息应单独出队,或指定 transactional 以指示作为同一个事务结果而添加到队列的多个消息应作为一个组出队。
STORAGE_CLAUSE 可使用 STORAGE_CLAUSE 指定表属性。STORAGE_CLAUSE 可以是 TABLESPACE tablespace_name、PCTFREE integer、PCTUSED integer、INITRANS integer、MAXTRANS integer、STORAGE storage_option

其中 storage_option 为以下一个或多个值:MINEXTENTS integer、MAXEXTENTS integer、PCTINCREASE integer、INITIAL size_clause、NEXT、FREELISTS integer、OPTIMAL size_clause、BUFFER_POOL {KEEP|RECYCLE|DEFAULT}。

说明 只强制执行 TABLESPACE 选项;为了实现兼容性而支持其他所有选项,不过忽略它们。可使用 TABLESPACE 子句指定将在其中创建表的表空间的名称。

示例

在创建队列表之前,必须先创建用户定义类型。该类型描述了表中的列和数据类型。以下命令创建名为 work_order 的类型:

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

以下命令使用 work_order 类型创建名为 work_order_table 的队列表:

CREATE QUEUE TABLE work_order_table OF work_order (sort_list (enq_time, priority));