Visualizza i contenuti di Oracle AQ SYS.AQ $ _JMS_TEXT_MESSAGE
-
06-07-2019 - |
Domanda
Ho un'applicazione che utilizza JMS in cima all'accodamento avanzato Oracle. Vorrei fare una query sulla tabella delle code che mostra il contenuto del messaggio (che nel mio caso è XML). Quindi, quando eseguo un 'selezionare user_data da [queue_table]' ottengo 'AQ SYS.AQ $ _JMS_TEXT_MESSAGE' come risposta.
Esiste una funzione che consente di visualizzare il contenuto di questo messaggio? Qualcosa come 'selezionare FUNCTION (user_data) da [queue_table]' o qualcosa del genere?
Ho cercato su Google, ho scansionato numerosi articoli Oracle sull'accodamento, ma non riesco a trovare questa cosa. Sospetto che ci sia un modo semplice per farlo, ma non riesco a trovarlo.
Soluzione
Ho lottato anche con questo. Ho scritto una risposta qui: http: // rwijk .blogspot.com / 2009/02 / whats-in-my-jms-queue.html .
Saluti, Rob.
Altri suggerimenti
Quindi suppongo che dovrebbe essere:
select queue.user_data.text_vc from [queue_table] queue
Le risposte qui non gestiscono la visualizzazione di contenuti più grandi, memorizzati in user_data.text_lob
.
Se il contenuto è maggiore di un certo numero di byte (4000?), text_vc
sarà null
e devi guardare text_lob
(che sarebbe null
altrimenti)
Per mostrare tutti i dati, indipendentemente dalle dimensioni, è possibile utilizzare la seguente query utilizzando nvl
:
SELECT nvl (q.user_data.text_vc, q.user_data.text_lob) FROM [queue_table] q
Suppongo che potresti (e dovresti considerare di) utilizzare coalesce
invece di nvl
, perché no valuta il secondo argomento , se il primo è già diverso da null
, ma non l'ho ancora provato.
Aggiunta al commento di stuXnet:
SELECT nvl(to_clob(q.user_data.text_vc), q.user_data.text_lob) FROM queue_table q;
senza to_clob otterrai ORA-22835 per dati maggiori di 4000 caratteri perché conserva lo spazio del primo argomento, che è solo VARCHAR2.
Prova il seguente comando:
seleziona user_data dal nome [queue_table]