2012-04-30 24 views
6

मैं एक डीबी 2 है (9.5.1) तालिका जो के रूप में परिभाषित किया गया है इस प्रकार है:डीबी 2 ने एक बड़े सीएलओबी (> 32 केबी) को पाठ में डाला?

CREATE TABLE MY_TABLE 
( 
    ID INTEGER DEFAULT 0 NOT NULL, 
    TEXT CLOB(104857600), 
    PRIMARY KEY (ID) 
); 

अब अगर मैं कि CLOB में संग्रहित है वास्तविक टेक्स्ट स्ट्रिंग क्वेरी करना चाहते हैं मैं इसे इस तरह से कार्य करें:

select cast(t.TEXT as varchar(32000)) 
    from MY_TABLE t 
    where t.ID = 1; 

समस्या अब है कि मेरे पाठ छोटा कर दिया जाता है, लेकिन एक varchar के लिए अधिकतम लंबाई 32 केबी है, इसलिए इस क्वेरी में विफल रहता है:

select cast(t.TEXT as varchar(33000)) 
    from MY_TABLE t 
where t.ID = 1; 

क्या कोई और संभावना है कि मैं एक सीएलओबी की पूर्ण सामग्री को टेक्स्ट आउटपुट के रूप में कैसे प्राप्त कर सकता हूं?

पीटर

उत्तर

2

ऐसी ही स्थिति है, जहां मैं एक्सएमएल डेटा पुनः प्राप्त करने के लिए किया था में, इस के लिए काम किया मुझे

select my_id, cast(xmlserialize(my_column as clob(1m)) as varchar(20000)) from schema.my_table where my_id = 463 

पहले मैं कास्ट बिना गिलहरी एसक्यूएल में ऐसा करने में सक्षम था, लेकिन नवीनतम संस्करण मैं था कास्ट

+2

लेकिन आप रास्ते में वर्कर (20000) तक पहुंचे। यह वर्चर्स को कैसे प्रबंधित करता है जिसका आकार> 32k है? – Beryllium

1

का उपयोग करने के लिए जहां तक ​​मुझे पता है कि 32k सीमा के आसपास जाने का कोई तरीका नहीं है, यदि आप इसका वर्णन करते हैं तो एसक्यूएल में इसका उपयोग करते हैं।

यदि आप परिणाम सेट पर getString() का उपयोग करने के बजाय अपने डेटा को पुनर्प्राप्त करने के लिए जेडीबीसी का उपयोग करते हैं, तो आपको एक सीएलओबी हैंडल मिलता है, और इससे आप एक स्ट्रीम प्राप्त कर सकते हैं।

दूसरी ओर, क्या यह वास्तव में एक सीमा है? क्या आप वास्तव में क्लोज़ इत्यादि में सीएलओबी का उपयोग करते हैं? एक आरडीबीएमएस को छोटे पंक्ति आकारों के लिए अनुकूलित किया जाता है ताकि लेनदेन में कुशलता से संभाला जा सके।

आम तौर पर, डेटा स्ट्रीम करें। अपने डेटा मॉडल को फिर से डिजाइन करने पर विचार करें, यदि इस सीएलओबी में डेटा है जो एकाधिक कॉलम में विभाजित किया जा सकता है, और आपको अपनी क्वेरी में कुछ डेटा चाहिए (जहां ..., ऑर्डर ... आदि)।

7

मुझे यह कहीं और वेब पर मिला और सोचा कि मैं देख रहा हूं क्योंकि यह 32k सीमा के आसपास काम करता है।

SELECT 
    XMLCAST (
    XMLPARSE (
     DOCUMENT CAST (
     MY_CLOB_DATA AS BLOB 
    ) 
     PRESERVE WHITESPACE 
    ) as XML 
) 
FROM 
MY_TABLE 
WHERE ID = 1 
+0

मुझे एक्सएमएल में एक बीएलओबी बदलने की जरूरत है, यह एक आकर्षण की तरह काम करता है बहुत बहुत धन्यवाद! – WannaGetHigh