Mostrar contenido de Oracle AQ SYS.AQ $ _JMS_TEXT_MESSAGE
-
06-07-2019 - |
Pregunta
Tengo una aplicación que utiliza JMS en la parte superior de la cola avanzada de Oracle. Me gustaría hacer una consulta en la tabla de la cola que muestra el contenido del mensaje (que en mi caso es XML). Entonces, cuando hago un 'select user_data from [queue_table]' obtengo 'AQ SYS.AQ $ _JMS_TEXT_MESSAGE' como respuesta.
¿Hay alguna función para que se pueda mostrar el contenido de este mensaje? ¿Algo como 'seleccionar FUNCIÓN (user_data) de [queue_table]' o algo así?
Busqué en Google, escaneé numerosos artículos de Oracle sobre colas, pero no puedo encontrar esto. Sospecho que hay una manera simple de hacer esto, pero no puedo encontrarla.
Solución
También luché con este. He escrito una respuesta aquí: http: // rwijk .blogspot.com / 2009/02 / whats-in-my-jms-queue.html .
Saludos, Rob.
Otros consejos
Entonces supongo que debería ser:
select queue.user_data.text_vc from [queue_table] queue
Las respuestas aquí no manejan la visualización de contenidos más grandes, almacenados en user_data.text_lob
.
Si el contenido es mayor que una determinada cantidad de bytes (4000?), text_vc
será null
y deberá mirar text_lob
(que sería nulo
de lo contrario)
Para mostrar todos los datos, independientemente de su tamaño, puede usar la siguiente consulta con nvl
:
SELECT nvl (q.user_data.text_vc, q.user_data.text_lob) FROM [queue_table] q
Supongo que podría (y debería considerar) usar se fusiona
en lugar de nvl
, porque no evalúe el segundo argumento , si el primero ya es diferente a null
, pero aún no lo he probado.
Adición al comentario de stuXnet:
SELECT nvl(to_clob(q.user_data.text_vc), q.user_data.text_lob) FROM queue_table q;
sin to_clob obtendrá ORA-22835 para datos de más de 4000 caracteres porque conserva el espacio del primer argumento, que es solo VARCHAR2.
Pruebe el siguiente comando:
seleccione user_data de [queue_table] name