Oracle AQ SYS.AQ $ _JMS_TEXT_MESSAGE의 내용을 표시합니다
-
06-07-2019 - |
문제
Oracle Advanced 대기열의 JMS OP Top을 사용하는 응용 프로그램이 있습니다. 메시지의 내용을 표시하는 큐 테이블에서 쿼리를 작성하고 싶습니다 (내 경우 XML). 따라서 [queue_table]에서 'select user_data를 선택하면'aq sys.aq $ _jms_text_message '를 응답으로 얻습니다.
이 메시지의 내용을 표시 할 수 있도록 함수가 있습니까? [queue_table]에서 'select function (user_data)'또는 뭔가?
나는 큐잉에 관한 수많은 오라클 기사를 스캔했지만, 이것을 찾을 수는 없습니다. 나는 이것을하는 간단한 방법이 있다고 생각하지만 그것을 찾을 수는 없습니다.
해결책
나는 이것도 고투했다. 여기에 답을 썼습니다. http://rwijk.blogspot.com/2009/02/whats-in-my-jms-queue.html .
안부, Rob.
다른 팁
그래서 나는 그것이 다음과 같다고 생각합니다.
select queue.user_data.text_vc from [queue_table] queue
여기서 답은 저장된 더 큰 내용의 표시를 처리하지 않습니다. 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
, 그러나 나는 아직 그것을 테스트하지 않았습니다.
Stuxnet의 의견 추가 :
SELECT nvl(to_clob(q.user_data.text_vc), q.user_data.text_lob) FROM queue_table q;
TO_CLOB가 없으면 4000 숯보다 큰 데이터에 대해 ORA-22835를 얻을 수 있습니다. 첫 번째 인수의 공간, 즉 varchar2 만 보존하기 때문입니다.
다음 명령을 시도하십시오.
queue_table] 이름에서 user_data를 선택하십시오