मल्टी-बाइट वर्णों के साथ मुझे बहुत दर्द हुआ है।सीएलओबी से VARCHAR2 तक जितना संभव हो उतना डेटा चुनें, डेटा
इस समस्या के लिए कोई सुझाव?
मैं एक CLOB क्षेत्र है कि पराक्रम कुछ मल्टी-बाइट वर्ण हैं, और मुझे एसक्यूएल में चुन सकते हैं और नीचे की प्रक्रिया के लिए एक स्ट्रिंग में इस क्षेत्र को बदलने की आवश्यकता है, वर्तमान में मैं उपयोग कर रहा हूँ:
SELECT DBMS_LOB.SUBSTR(description, 4000, 1) FROM table
लेकिन उपरोक्त आदेश में 4000 बाइट्स के बजाए वर्णों की लंबाई में है। तो मुझे किसी भी बहु-बाइट वर्णों को संभालने के लिए 3000 में बदलना पड़ा जो डेटा में क्रिप्ट हो सकता है और बफर आकार त्रुटि होगी।
समस्या उन रिकॉर्ड्स के लिए है जिनमें मल्टीबाइट वर्ण नहीं है, यह अनावश्यक रूप से आवश्यकतानुसार अधिक डेटा को छोटा कर सकता है।
SELECT DBMS_LOB.SUBSTR(description, 4000bytes, 1) FROM table
इस तरह मैं के रूप में ज्यादा डेटा बाहर निकल सकते हैं: (। 4000 स्ट्रिंग सीमा है, हम/उस के साथ रहना पड़ा सकता है)
वहाँ के बराबर में कुछ करने के लिए एक रास्ता है यथासंभव।
नोट: मैं बनाने की अनुमति नहीं कर रहा हूँ अस्थायी तालिकाओं/दृश्य, का उपयोग नहीं कर PL/SQL, केवल एसक्यूएल का चयन करें ...
कि हो नहीं करना चाहिए "... SUBSTRB के साथ"? (SUBSTR के बजाय SUBSTRB) –
ब्याज से: क्या आप जानते हैं कि क्या होता है यदि पहले 3 9 99 वर्ण एक बाइट लंबे होते हैं और 4000 वां चरित्र एक बहु-बाइट होता है? क्या यह स्थिति 4000 पर गलत चरित्र नहीं लौटाएगा (क्योंकि यह मल्टी-बाइट चार के पहले बाइट को एकल-बाइट चार के रूप में व्याख्या करता है)? –
कोई जेफ़री यह काम नहीं करेगा, अगर 'विवरण' में मल्टीबाइट वर्ण हैं, तो सबसे पहले डीबीएमएस_LOB.SUBSTR पहले से ही स्ट्रिंग बफर त्रुटि को SUBSTRB तक पहुंचने से पहले हिट करता है। – alchn