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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top