Ответ 1
Я тоже боролся с этим. Я написал здесь ответ: http://rwijk.blogspot.com/2009/02/whats-in-my-jms-queue.html.
С уважением, Роб.
У меня есть приложение, которое использует JMS op сверху расширенной очереди Oracle. Я хотел бы сделать запрос в таблице очередей, в котором отображается содержимое сообщения (которое в моем случае является XML). Поэтому, когда я делаю "select user_data из [queue_table], я получаю" AQ SYS.AQ $_JMS_TEXT_MESSAGE "в качестве ответа.
Есть ли функция, позволяющая отображать содержимое этого сообщения? Что-то вроде "выберите FUNCTION (user_data) из [queue_table]" или что-то еще?
Я googled, просмотрел многочисленные статьи Oracle о очередности, но я не могу найти эту вещь. Я подозреваю, что есть простой способ сделать это, но я не могу его найти.
Я тоже боролся с этим. Я написал здесь ответ: 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