Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

UTL_FILE.WRITE_ERROR utl_file.put को लूप में कॉल करते समय

  1. आप जिस Oracle संस्करण का उपयोग कर रहे हैं उसे पोस्ट करें! या हम बस अनुमान लगा सकते हैं...

  2. आपका fflush आपकी अपेक्षा के अनुरूप काम नहीं करेगा - दस्तावेज़ीकरण :

    FFLUSH फ़ाइल हैंडल द्वारा पहचानी गई फ़ाइल में लंबित डेटा को भौतिक रूप से लिखता है। आम तौर पर, किसी फ़ाइल में लिखा जा रहा डेटा बफ़र किया जाता है। FFLUSH प्रक्रिया बफ़र किए गए डेटा को फ़ाइल में लिखने के लिए बाध्य करती है। डेटा को एक न्यूलाइन वर्ण के साथ समाप्त किया जाना चाहिए।

  3. लाइन बिल्कुल सही है TO_CHAR(10) गलत है! बस कोशिश करें SELECT TO_CHAR(10) FROM DUAL; आपको मिलेगा 10 जिसकी तुलना आप किसी एक वर्ण से करते हैं। एक एकल वर्ण कभी भी '10' नहीं होगा क्योंकि 10 में दो वर्ण होते हैं!

  4. आपकी समस्या बहुत बड़ी 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 गुना तेज चल सकता है!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. INSERT ट्रिगर (Oracle) से पहले IF EXISTS (SELECT ...) का उपयोग करना

  2. AUTONOMOUS_TRANSACTION

  3. कीवर्ड से नहीं मिला जहां अपेक्षित था (ओरेकल एसक्यूएल)

  4. वर्ष के अनुसार अनुक्रम रीसेट करें, न कि न्यूनतम या अधिकतम मान के अनुसार

  5. Ingres में मनमानी क्वेरी के लिए परिणाम सेट आकार को कैसे सीमित करें?