如果将表绑定到队列,将在队列与数据库之间建立有用的接口。但是,由于队列自身存在的限制,并非所有数据库功能均可使用。
从队列访存消息时,缺省数据库处理是将该消息移出队列或直接除去。只要数据库读取了队列,该队列内的数据都将发生更改。此行为与数据库执行的标准读取不同,在后者中,数据不会更改。如果仅提供使用户能够浏览的映射(即读取操作不除去队列),将失去主要的队列功能。同时启用两个处理模型将提供更多选项,因此需要承担相应的职责。
缺省情况下,从队列访存消息时将除去顶级元素。WMQ 允许根据 correlid 检索消息。correlid 是可用作密钥的相关标识,例如将响应消息与请求消息关联。如果消息的 correlid 匹配请求的 correlid,将返回此消息。如果使用 correlid 列限定了 VTI 表,将把 correlid 限定符传递到 WMQ 请求,以便访存值。
INSERT into flounder (deQueuedMsg) values (SELECT msg from vtimq);
执行完成之后,队列中将不再保留任何消息,而 flounder 表中将出现三个新行。
INSERT into flounder (deQueuedMsg) values (SELECT msg from vtimq where correlid = 'fred');
包含等号 (=) 和 NULL 之外的限定符的语句将返回错误。包含 NULL 的语句将返回意外结果。