Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Ekstraksi Oracle BLOB Sangat Lambat

Saya cukup yakin Anda tidak harus mengambil semua BLOB ke dalam array di awal prosedur. Karena Anda membaca data BLOB dan tidak pernah benar-benar menutup pencari lob, Oracle harus menyimpan semua info ini di memori. Saya kira ini adalah kasus pengisian memori yang berlebihan.

Coba ini sebagai gantinya:

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. Bisakah seseorang menjelaskan apa yang sebenarnya dilakukan oleh pernyataan MERGE di Oracle?

  2. Kode untuk memanggil fungsi dalam paket dari C# dan ODP.NET

  3. Oracle 12.2 Sharding

  4. bagaimana cara menambah nilai datetime dengan nilai kenaikan 30 menit di Oracle?

  5. Cara menghasilkan jejak FRD di Oracle Apps 11i/R12