DBMS_AQADM 包

DM的DBMS_AQADM包部分兼容ORACLE的DBMS_AQADM包,提供高级队列的以下常用功能:创建、修改、删除队列表和队列,添加、删除订阅者等。

38.1 数据类型

  1. SYS.AQ$_AGENT

系统对象类型,用于描述订阅者信息。

语法如下:

TYPE SYS.AQ$_AGENT IS OBJECT (

	name VARCHAR(30),

	address VARCHAR(1024),

	protocol NUMBER

);

参数详解

  • NAME指定订阅者名,非正规表示符要用""括起来,如"@@##"。
  • 剩余参数仅做语法支持。
  1. DBMS_AQADM. AQ$_PURGE_OPTIONS_T

DBMS_AQADM包专有类型,指定清理队列表选项。

语法如下:

TYPE AQ$_PURGE_OPTIONS_T IS RECORD(

	block BOOLEAN DEFAULT FALSE,

	delivery_mode INTEGER DEFAULT 1

);

参数详解

  • 参数仅做语法支持。

38.2 相关方法

  1. CREATE_QUEUE_TABLE

创建队列表。

语法如下:

PROCEDURE CREATE_QUEUE_TABLE(

	queue_table IN VARCHAR,

	queue_payload_type IN VARCHAR,

	storage_clause IN VARCHAR DEFAULT NULL,

	sort_list IN VARCHAR DEFAULT NULL,

	multiple_consumers IN BOOLEAN DEFAULT FALSE,

	message_grouping IN INTEGER DEFAULT NONE,

	tab_comment IN VARCHAR DEFAULT NULL,

	auto_commit IN BOOLEAN DEFAULT TRUE,

	primary_instance IN INTEGER DEFAULT 0,

	secondary_instance IN INTEGER DEFAULT 0,

	compatible IN VARCHAR DEFAULT NULL,

	secure IN BOOLEAN DEFAULT FALSE

);

参数详解

  • QUEUE_TABLE指定要创建的队列表名,格式为:[模式名.]表名。非正规表示符要用""括起来,如"@@##".MYtab。
  • QUEUE_PAYLOAD_TYPE指定消息载荷类型,格式为:[模式名.]数据类型名。可取值包括RAW\VARBINARY\VARBINARY(8188)或自定义CLASS\object类型。
  • STORAGE_CLAUSE指定创建队列表的存储选项,即建表语法STORAGE()中的内容。
  • MULTIPLE_CONSUMERS指定队列是否可以添加多个订阅者,为TRUE时才可使用添加订阅、注册通知和触发回调等功能。
  • TAB_COMMENT指定队列表注释。
  • 剩余参数仅做语法支持。
  1. ALTER_QUEUE_TABLE

修改队列表。

语法如下:

PROCEDURE ALTER_QUEUE_TABLE (

	queue_table IN VARCHAR,

    comment IN VARCHAR DEFAULT NULL,

	primary_instance IN INTEGER DEFAULT NULL,

	secondary_instance IN INTEGER DEFAULT NULL

);

参数详解

  • QUEUE_TABLE指定要修改的队列表名,格式为:[模式名.]队列名。
  • COMMENT指定要修改的队列表注释。
  • 剩余参数仅做语法支持。
  1. DROP_QUEUE_TABLE

删除队列表。

语法如下:

PROCEDURE DROP_QUEUE_TABLE(

	queue_table IN VARCHAR,

	force IN BOOLEAN DEFAULT FALSE,

	auto_commit IN BOOLEAN DEFAULT TRUE

);

参数详解

  • QUEUE_TABLE指定要删除的队列表名,格式为:[模式名.]队列名。
  • FORCE指定是否强制删除关联的队列。
  • 剩余参数仅做语法支持。
  1. PURGE_QUEUE_TABLE

清理队列表中的消息。

语法如下:

PROCEDURE DROP_QUEUE_TABLE(

	queue_table IN VARCHAR,

	purge_condition IN varchar,

	purge_options IN AQ$_PURGE_OPTIONS_T

);

参数详解

  • QUEUE_TABLE指定要清理的队列表名,格式为:[模式名.]队列名。
  • 剩余参数仅做语法支持。
  1. CREATE_QUEUE

创建队列。

语法如下:

PROCEDURE CREATE_QUEUE(

	queue_name IN VARCHAR,

	queue_table IN VARCHAR,

	queue_type IN INTEGER DEFAULT NORMAL_QUEUE,

    max_retries IN NUMBER DEFAULT NULL,

	retry_delay IN NUMBER DEFAULT 0,

	retention_time IN NUMBER DEFAULT 0,

	dependency_tracking IN BOOLEAN DEFAULT FALSE,

	queue_comment IN VARCHAR DEFAULT NULL,

	auto_commit IN BOOLEAN DEFAULT TRUE

);

参数详解

  • QUEUE_NAME指定要创建的队列名,格式为:[模式名.]队列名。非正规表示符要用""括起来,如"@@##".MYqueue。
  • QUEUE_TABLE指定队列所属的队列表,格式为:[模式名.]队列表名。队列和队列表必须属于同一模式。
  • QUEUE_COMMENT指定队列注释。
  • 剩余参数仅做语法支持。
  1. ALTER_QUEUE

修改队列。

语法如下:

PROCEDURE ALTER_QUEUE (

	queue_name IN VARCHAR,

	max_retries IN NUMBER DEFAULT NULL,

	retry_delay IN NUMBER DEFAULT NULL,

	retention_time IN NUMBER DEFAULT NULL,

	queue_comment IN VARCHAR DEFAULT NULL

);

参数详解

  • QUEUE_NAME指定要修改的队列名,格式为:[模式名.]队列名。
  • QUEUE_COMMENT指定队列注释。
  • 剩余参数仅做语法支持。
  1. DROP_QUEUE

删除队列,删除前必须先STOP队列。

语法如下:

PROCEDURE DROP_QUEUE(

	queue_name IN VARCHAR,

	auto_commit IN BOOLEAN DEFAULT TRUE

);

参数详解

  • QUEUE_NAME指定要删除的队列名,格式为:[模式名.]队列名。
  • 剩余参数仅做语法支持。
  1. START_QUEUE

启用队列功能。

语法如下:

PROCEDURE START_QUEUE(

	queue_name IN VARCHAR,

	enqueue IN BOOLEAN DEFAULT TRUE,

	dequeue IN BOOLEAN DEFAULT TRUE

);

参数详解

  • QUEUE_NAME指定要启用功能的队列名,格式为:[模式名.]队列名。
  • ENQUEUE指定是否启用入队操作。
  • DEQUEUE指定是否启用出队操作。
  1. STOP_QUEUE

禁用队列功能。

语法如下:

PROCEDURE STOP_QUEUE(

	queue_name IN VARCHAR,

	enqueue IN BOOLEAN DEFAULT TRUE,

	dequeue IN BOOLEAN DEFAULT TRUE,

	wait IN BOOLEAN DEFAULT TRUE

);

参数详解

  • QUEUE_NAME指定要禁用功能的队列名,格式为:[模式名.]队列名。
  • ENQUEUE指定是否禁用入队操作。
  • DEQUEUE指定是否禁用出队操作。
  • 剩余参数仅做语法支持。
  1. ADD_SUBSCRIBER

添加订阅者。

语法如下:

PROCEDURE ADD_SUBSCRIBER (

	queue_name IN VARCHAR,

	subscriber IN SYS.AQ$_AGENT,

	rule IN VARCHAR DEFAULT NULL,

	transformation IN VARCHAR DEFAULT NULL,

	queue_to_queue IN BOOLEAN DEFAULT FALSE,

	delivery_mode IN INTEGER DEFAULT DBMS_AQADM.PERSISTENT

);

参数详解

  • QUEUE_NAME指定要添加订阅者的队列名,格式为:[模式名.]队列名。
  • SUBSCRIBER指定订阅者。参考1.1节中的数据类型说明。
  • 剩余参数仅做语法支持。
  1. REMOVE_SUBSCRIBER

添加订阅者。

语法如下:

PROCEDURE REMOVE_SUBSCRIBER (

	queue_name IN VARCHAR,

	subscriber IN SYS.AQ$_AGENT

);

参数详解

  • QUEUE_NAME指定要删除订阅者的队列名,格式为:[模式名.]队列名。
  • SUBSCRIBER指定要删除的订阅者,参考1.1节中数据类型的说明。

38.3 举例说明

使用包过程和函数之前,如果还未创建过系统包,请先调用系统过程创建。

SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_AQADM');

例1 创建消息载荷类型MY_MSG_TYPE和模式SSS,并在其上创建队列表"@TAB"。

CREATE OR REPLACE TYPE MY_MSG_TYPE AS OBJECT(message VARCHAR(4000));

/

CREATE SCHEMA SSS;

/

DBMS_AQADM.CREATE_QUEUE_TABLE(

	queue_table => 'SSS."@TAB"',

	queue_payload_type => 'MY_MSG_TYPE',

	multiple_consumers => TRUE

);

例2 创建队列MY_QUEUE并启动入队出队功能。

DBMS_AQADM.CREATE_QUEUE(

	queue_name => 'SSS.MY_QUEUE',

	queue_table => 'SSS."@TAB"'

);
DBMS_AQADM.START_QUEUE(queue_name => 'SSS.MY_QUEUE');

例3 为队列添加订阅者MY_SUB。

DBMS_AQADM.ADD_SUBSCRIBER(

	queue_name => 'SSS.MY_QUEUE',

	subscriber => SYS.AQ$_AGENT('MY_SUB', NULL, NULL)

);

例4 清理环境,包括禁用、删除队列,删除队列表。

DBMS_AQADM.STOP_QUEUE(queue_name => 'SSS.MY_QUEUE');

DBMS_AQADM.DROP_QUEUE(queue_name => 'SSS.MY_QUEUE');

DBMS_AQADM.DROP_QUEUE_TABLE(queue_table => 'SSS."\@TAB"');
微信扫码
分享文档
扫一扫
联系客服