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

Oracle BLOB एक्सट्रैक्शन बहुत धीमा

मुझे पूरा यकीन है कि प्रक्रिया की शुरुआत में आपको सभी बीएलओबी को एक सरणी में नहीं लाना चाहिए। चूंकि आप बीएलओबी डेटा पढ़ते हैं और वास्तव में किसी भी लॉब लोकेटर को बंद नहीं करते हैं, ओरेकल को यह सारी जानकारी स्मृति में रखना है। मुझे लगता है कि यह मेमोरी ओवरफिल का मामला है।

इसके बजाय इसे आजमाएं:

CURSOR cc IS (SELECT ...)
BEGIN
   OPEN cc;
   LOOP
      FETCH cc
         INTO l_fname, l_blob;
      EXIT WHEN cc%NOTFOUND;
      l_blob_len := DBMS_LOB.getlength(l_blob);
      DBMS_OUTPUT.PUT_LINE(l_blob_len);
      l_file := UTL_FILE.fopen('BLOBS', l_x || '_' || l_fname, 'w', 32767);
      l_pos  := 1;
      l_x    := l_x + 1;
      WHILE l_pos < l_blob_len LOOP
         DBMS_LOB.READ(l_blob, l_amount, l_pos, l_buffer);
         UTL_FILE.put_raw(l_file, l_buffer, TRUE);
         l_pos := l_pos + l_amount;
      END LOOP;
      UTL_FILE.fclose(l_file);
   END LOOP;
   CLOSE cc;
END;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं ORA-00911:अमान्य वर्ण त्रुटि को कैसे हल कर सकता हूं?

  2. विंडोज़ सेवा से Oracle से कनेक्ट नहीं हो सकता (त्रुटि:ORA-12154:TNS:सेवा का नाम हल नहीं कर सका (12154))

  3. कर्सर के साथ PL/SQL नेस्टेड लूप्स

  4. ऑब्जेक्ट प्रकार समर्थन के साथ .Net के लिए तृतीय-पक्ष Oracle प्रदाता

  5. नल डालने पर डिफ़ॉल्ट मान डालें