Отображение содержимого 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 .
с уважением, Грабить.
ответы здесь не обрабатывают отображение большего содержимого, хранящегося в 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.