Отображение содержимого Oracle AQ SYS.AQ $_JMS_TEXT_MESSAGE

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

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

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

Ответ 2

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

select queue.user_data.text_vc from [queue_table] queue

Ответ 3

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

Ответ 4

Дополнение к комментарию 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.

Ответ 5

Попробуйте выполнить следующую команду:

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