-
आप जिस Oracle संस्करण का उपयोग कर रहे हैं उसे पोस्ट करें! या हम बस अनुमान लगा सकते हैं...
-
आपका
fflush
आपकी अपेक्षा के अनुरूप काम नहीं करेगा - दस्तावेज़ीकरण :FFLUSH फ़ाइल हैंडल द्वारा पहचानी गई फ़ाइल में लंबित डेटा को भौतिक रूप से लिखता है। आम तौर पर, किसी फ़ाइल में लिखा जा रहा डेटा बफ़र किया जाता है। FFLUSH प्रक्रिया बफ़र किए गए डेटा को फ़ाइल में लिखने के लिए बाध्य करती है। डेटा को एक न्यूलाइन वर्ण के साथ समाप्त किया जाना चाहिए।
-
लाइन बिल्कुल सही है TO_CHAR(10) गलत है! बस कोशिश करें
SELECT TO_CHAR(10) FROM DUAL;
आपको मिलेगा10
जिसकी तुलना आप किसी एक वर्ण से करते हैं। एक एकल वर्ण कभी भी '10' नहीं होगा क्योंकि 10 में दो वर्ण होते हैं! -
आपकी समस्या बहुत बड़ी XML-फ़ाइलों के साथ एक बफर-ओवरफ़्लो होने की संभावना है, लेकिन ध्यान रखें, लक्ष्य सिस्टम की अन्य समस्याएं भी write_errors का कारण बन सकती हैं, जिन्हें संभाला जाना चाहिए।
समाधान
-
त्वरित और गंदा :चूंकि आप वैसे भी प्रदर्शन के बारे में परवाह नहीं करते हैं, आप बस हर एक्स बाइट फ़ाइल को बंद कर सकते हैं और इसे ए के साथ फिर से खोल सकते हैं। तो बस लूप में जोड़ें:
IF MOD( l_offset, 32000 ) = 0 THEN UTL_FILE.FCLOSE( f_out ); UTL_FILE.FOPEN( out_fpath, out_fname, f_out, 'a', 32767 ); END IF;
-
सही काम के लिए सही टूल का इस्तेमाल करें:
UTL_FILE
जटिल डेटा को संभालने के लिए उपयुक्त नहीं है। UTL_FILE के लिए एकमात्र यूज़केस टेक्स्ट की न्यूलाइन से अलग की गई छोटी लाइनें हैं। बाकी सब चीजों के लिए आपको रॉ बाइट्स लिखनी चाहिए! (जो आपको ENCODING पर नियंत्रण करने की भी अनुमति देगा, जो वर्तमान में केवल मिनी-वैनिली-लकी-अनुमान है) -
एनआईओ-फाइलचैनल के साथ जावा-संग्रहीत-प्रक्रिया लिखें - तेज, सुरक्षित, अच्छा... लेकिन सावधान रहें, आपका प्रोग्राम 10 गुना तेज चल सकता है!