2009-06-19 8 views
11

की सामग्री प्रदर्शित करें मेरे पास एक ऐसा एप्लिकेशन है जो ओरेकल उन्नत क्यूइंग के जेएमएस ओप टॉप का उपयोग करता है। मैं कतार तालिका पर एक प्रश्न करना चाहता हूं जो संदेश की सामग्री दिखाता है (जो मेरे मामले में एक्सएमएल है)। इसलिए जब मैं 'queue_table] से' user_data का चयन करता हूं 'तो मुझे प्रतिक्रिया के रूप में' AQ SYS.AQ $ _JMS_TEXT_MESSAGE 'मिलता है।

क्या कोई फ़ंक्शन है ताकि इस संदेश की सामग्री को दिखाया जा सके? कुछ [queue_table] 'या कुछ से' FUNCTION (user_data) का चयन करें?

मैंने क्यूइंग के बारे में कई ओरेकल लेख स्कैन किए, लेकिन मुझे यह चीज़ नहीं मिल रही। मुझे संदेह है कि ऐसा करने का एक आसान तरीका है, लेकिन मुझे यह नहीं मिल रहा है।

उत्तर

10

मैं भी इस के साथ संघर्ष कर रहा था। मैंने यहां एक उत्तर लिखा है: http://rwijk.blogspot.com/2009/02/whats-in-my-jms-queue.html

सम्मान, रॉब।

+1

"queue.user_data.text_vc [queue_table] queue से चुनें" मैंने यहां जवाब जोड़ा, इसलिए मैं समस्या का समाधान के रूप में उत्तर को बढ़ावा दे सकता हूं, और मैं जवाब पूरा करना चाहता हूं। –

+1

मुझे पता चला है कि बड़ा टेक्स्ट text_vc –

4

तो मुझे लगता है कि यह होना चाहिए:

select queue.user_data.text_vc from [queue_table] queue 
+1

के बजाय queue.user_data.text_lob में संग्रहीत किया जाता है। आपको user_data.text_vc के सामने एक उपनाम या table_name का उपयोग करना चाहिए। अन्यथा यह text_vc नामक फ़ंक्शन वाले उपयोगकर्ता_डेटा को ढूंढने लगता है, जिसके परिणामस्वरूप त्रुटि संदेश ORA-00904: "USER_DATA"। "TEXT_VC": अवैध पहचानकर्ता –

0

निम्न आदेश का प्रयास करें: [queue_table] से

चयन user_data यहाँ नाम

+1

प्रश्न 2 साल पहले पहले ही उत्तर दिया गया था। –

1

जवाब बड़ा के प्रदर्शन का प्रबंधन नहीं करती सामग्री, user_data.text_lob में संग्रहीत। यदि सामग्री बाइट्स (4000?) की एक निश्चित राशि, text_vcnull हो जाएगा से बड़ा है और आप (जो null होगा अन्यथा)

आदेश सभी डेटा दिखाने के लिए, भले ही यह आकार है text_lob को देखने के लिए है, आप nvl का उपयोग कर निम्न क्वेरी का उपयोग कर सकते हैं:

SELECT nvl(q.user_data.text_vc, q.user_data.text_lob) FROM [queue_table] q

मुझे लगता है कि आप (और करने के लिए विचार करना चाहिए) कर सकता है nvl के बजाय coalesce का उपयोग करें, क्योंकि यह doesn't evaluate the second argument, अगर पहले एक पहले से ही 0,123,056 से अलग है, लेकिन मैंने अभी तक इसका परीक्षण नहीं किया है। Stuxnet की टिप्पणी करने के लिए

1

अलावा:

SELECT nvl(to_clob(q.user_data.text_vc), q.user_data.text_lob) FROM queue_table q; 

बिना to_clob आप क्योंकि यह पहला तर्क है, जो केवल VARCHAR2 है की अंतरिक्ष को बरकरार रखता है 4000 वर्ण से बड़ा डेटा के लिए ORA-22835 मिल जाएगा।