Отображение содержимого Oracle AQ SYS.ТЕКСТОВОЕ СООБЩЕНИЕ AQ$ JMS

У меня есть приложение, которое использует JMS op top of Oracle advanced queuing. Я хотел бы сделать запрос в таблице очередей, который показывает содержимое сообщения (которое в моем случае является XML). Поэтому, когда я делаю " select user_data from [queue_table]", я получаю " AQ SYS.AQ$_JMS_TEXT_MESSAGE ' в качестве ответа.

есть ли функция, позволяющая отображать содержимое этого сообщения? Что-то вроде "выберите функцию(user_data) из [queue_table]" или что-то еще?

я погуглил, просмотрел множество статей Oracle о очереди, но я не могу найти эту вещь. Я подозреваю, что есть простой способ сделать это, но я не могу найти его.

5 ответов


с этим я тоже боролся. Я написал здесь ответ:http://rwijk.blogspot.com/2009/02/whats-in-my-jms-queue.html .

с уважением, Грабить.


поэтому я полагаю, что это должно быть:

select queue.user_data.text_vc from [queue_table] queue

ответы здесь не обрабатывают отображение большего содержимого, хранящегося в user_data.text_lob. Если содержимое больше определенного количества байтов (4000?), text_vc будет null и вы должны смотреть на text_lob (который будет null в противном случае)

чтобы показать все данные, независимо от их размера, вы можете использовать следующий запрос, используя nvl:

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

Я думаю, вы могли бы (и должны рассматривать использовать) coalesce вместо nvl, потому что не оценивает второй аргумент, если первый уже разные null, но я еще не тестировал это.


дополнение к комментарию stuXnet:

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

без to_clob вы получите ORA-22835 для данных больше 4000 символов, потому что он сохраняет пространство первого аргумента, который является только VARCHAR2.


пожалуйста, попробуйте следующую команду:

выберите user_data из [queue_table] name