14

我有一个使用 Oracle 高级队列的 JMS op top 的应用程序。我想对显示消息内容的队列表进行查询(在我的例子中是 XML)。因此,当我执行“从 [queue_table] 中选择 user_data”时,我得到“AQ SYS.AQ$_JMS_TEXT_MESSAGE”作为响应。

是否有可以显示此消息内容的功能?诸如“从 [queue_table] 中选择 FUNCTION(user_data)”之类的东西?

我用谷歌搜索,扫描了许多关于排队的 Oracle 文章,但我找不到这个东西。我怀疑有一种简单的方法可以做到这一点,但我找不到。

4

5 回答 5

14

我也为此苦苦挣扎。我在这里写了一个答案:http ://rwijk.blogspot.com/2009/02/whats-in-my-jms-queue.html 。

问候,罗布。

于 2009-06-20T08:25:00.313 回答
7

所以我想应该是:

select queue.user_data.text_vc from [queue_table] queue
于 2009-06-20T12:33:44.180 回答
3

这里的答案不处理较大内容的显示,存储在user_data.text_lob. 如果内容大于一定数量的字节(4000?),text_vc将是null并且您必须查看text_lobnull否则)

为了显示所有数据,无论其大小,您都可以使用以下查询nvl

SELECT nvl(q.user_data.text_vc, q.user_data.text_lob) FROM [queue_table] q

我想你可以(并且应该考虑)使用coalesce而不是nvl,因为它不会评估第二个参数,如果第一个参数已经不同于null,但我还没有测试过那个。

于 2015-05-26T11:08:09.827 回答
1

除了 stuXnet 的评论:

SELECT nvl(to_clob(q.user_data.text_vc), q.user_data.text_lob) FROM queue_table q; 

如果没有 to_clob,对于大于 4000 个字符的数据,您将得到 ORA-22835,因为它保留了第一个参数的空间,它只是 VARCHAR2。

于 2016-04-12T10:44:18.993 回答
-1

请尝试以下命令:

从 [queue_table] 名称中选择 user_data

于 2011-03-18T09:47:53.230 回答