Показать содержимое Oracle AQ SYS.AQ $ _JMS_TEXT_MESSAGE - PullRequest
12 голосов
/ 20 июня 2009

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

Существует ли функция для отображения содержимого этого сообщения? Что-то вроде «выберите FUNCTION (user_data) из [queue_table]» или что-то в этом роде *

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

Ответы [ 5 ]

10 голосов
/ 20 июня 2009

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

С уважением, Роб.

6 голосов
/ 20 июня 2009

Итак, я полагаю, это должно быть:

select queue.user_data.text_vc from [queue_table] queue
2 голосов
/ 26 мая 2015

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

1 голос
/ 12 апреля 2016

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

0 голосов
/ 18 марта 2011

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

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

...