MQCreateVtiRead() 函数

MQCreateVtiRead() 函数会创建表,然后将其映射到 WMQ 管理的队列。

语法

table_name
必需参数。指定要创建的表的名称。由 service_name 参数指向的队列将映射到该表。
service_name
可选参数。引用 "gbasedbt".mqiservice 表的 servicename 列中的值。如果不指定 service_name,将把 IDS.DEFAULT.SERVICE 用作服务。service_name 的最大大小为 48 个字节。
policy_name
可选参数。引用 "gbasedbt".mqipolicy 表的 policyname 列中的值。如果不指定 policy_name,将把 IDS.DEFAULT.POLICY 用作策略。policy_name 的最大大小为 48 个字节。
maxMessage
可选参数。指定要发送或接收的消息的最大长度。缺省值为 4000;允许的最大大小为 32628

用途

MQCreateVtiRead() 函数会创建绑定到由 service_name 指定的队列的表(使用 policy_name 中定义的服务质量策略)。如果从该函数创建的表中进行选择,将返回队列中的所有已落实消息,但不会从队列除去这些消息。如果没有任何消息可以返回,SELECT 语句将不返回任何行。对绑定表执行插入操作将把消息放入队列。

创建的表具有以下模式,并使用 "gbasedbt".mq 访问方法:
create table table_name (
       msg lvarchar(maxMessage),
       correlid varchar(24),
       topic varchar(40),
       qname varchar(48),
       msgid varchar(12),
       msgformat varchar(8));
             using "gbasedbt".mq (SERVICE = service_name,
                                  POLICY = policy_name,
                                  ACCESS = "READ");
绑定到队列的表的映射需要转换操作。对表中特定列执行的操作将转换为队列内的特定操作,如下面概述的内容:
  • 插入操作将把以下内容插入映射的表列:
    • msg。将插入队列的消息文本。如果 msg 为 NULL,MQ 函数将向队列发送一条长度为零的消息。
    • correlid。将使用指定的相关标识发送消息。
  • 选择操作将通过以下方式把这些内容映射到 WMQ 队列:
    • msg。消息从队列检索
    • correlid。在 WHERE 子句中,为传递到队列管理器以限定消息的值(相关标识)。执行限定时唯一应使用的运算符为等号 (=)。
下表描述 MQCreateVtiRead() 函数自变量的解释方式。
表 1. MQCreateVtiRead() 自变量解释
用途 自变量解释
MQCreateVtiRead(arg1) arg1 = table_name
MQCreateVtiRead(arg1, arg2) arg1 = table_name

arg2 = service_name

MQCreateVtiRead(arg1, arg2, arg3) arg1 = table_name

arg2 = service_name

arg3 = policy_name

MQCreateVtiRead(arg1, arg2, arg3, arg4) arg1 = table_name

arg2 = service_name

arg3 = policy_name

arg4 = maxMessage

返回码

't'
操作成功。
'f'
操作失败。

示例

使用缺省服务名称和策略名称创建表 VtiReadTest
begin;
EXECUTE FUNCTION MQCreateVtiRead('VtiReadTest');
commit;
向队列插入消息:
INSERT INTO VtiReadTest(msg) values ('QMessage');
从队列读取消息:
select * from VtiReadTest;