Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Ekstrakcja Oracle BLOB bardzo powolna

Jestem prawie pewien, że nie powinieneś pobierać wszystkich obiektów BLOB do tablicy na początku procedury. Ponieważ czytasz dane BLOB i nigdy nie zamykasz żadnego lokalizatora lobów, Oracle musi przechowywać wszystkie te informacje w pamięci. Przypuszczam, że jest to przypadek przepełnienia pamięci.

Spróbuj zamiast tego:

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. Czy Oracle SQL*Loader może przetwarzać XML?

  2. Jak utworzyć raport PDF za pomocą PL/SQL

  3. Błąd SQL:ORA-12899:wartość za duża dla kolumny

  4. Wywołanie procedury składowanej Oracle z parametrem wyjściowym z SQL Server

  5. Wyjaśnienie operatora Oracle INTERSECT