特殊注意事项

如果将表绑定到队列,将在队列与数据库之间建立有用的接口。但是,由于队列自身存在的限制,并非所有数据库功能均可使用。

从队列访存消息时,缺省数据库处理是将该消息移出队列或直接除去。只要数据库读取了队列,该队列内的数据都将发生更改。此行为与数据库执行的标准读取不同,在后者中,数据不会更改。如果仅提供使用户能够浏览的映射(即读取操作不除去队列),将失去主要的队列功能。同时启用两个处理模型将提供更多选项,因此需要承担相应的职责。

缺省情况下,从队列访存消息时将除去顶级元素。WMQ 允许根据 correlid 检索消息。correlid 是可用作密钥的相关标识,例如将响应消息与请求消息关联。如果消息的 correlid 匹配请求的 correlid,将返回此消息。如果使用 correlid 列限定了 VTI 表,将把 correlid 限定符传递到 WMQ 请求,以便访存值。

在以下示例中,一个队列有三条消息,只有第二条消息包含 correlid,该 correlid 命名为 'fred'。以下语句将从队列除去所有三个消息,并将其放置到表 flounder 中:
INSERT into flounder (deQueuedMsg) values (SELECT msg from vtimq);

执行完成之后,队列中将不再保留任何消息,而 flounder 表中将出现三个新行。

以下示例限定 vtimq 表:
INSERT into flounder (deQueuedMsg) values (SELECT msg from vtimq where
correlid = 'fred');
以上语句将创建两组消息:
  • 不符合 correlid = 'fred' 限定条件的消息。
  • 符合 correlid = 'fred' 限定条件的消息。符合限定条件的消息位于 flounder 表中。

包含等号 (=) 和 NULL 之外的限定符的语句将返回错误。包含 NULL 的语句将返回意外结果。