sql >> Databasteknik >  >> RDS >> Oracle

Oracle BLOB-extraktion mycket långsam

Jag är ganska säker på att du inte ska hämta alla BLOB i en array i början av proceduren. Eftersom du läser BLOB-data och faktiskt aldrig stänger någon loblocator, måste Oracle behålla all denna information i minnet. Jag skulle gissa att detta är ett fall av överfyllnad minne.

Prova detta istället:

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. Hur får jag PHP och MySQL att fungera på IIS 7.0?

  2. Python Matplotlib och MySQL och Ginput

  3. Utlöser utlösare vid uppdatering av kolumnA eller kolumnB eller kolumnC

  4. Hämta org.hibernate.exception.JDBCConnectionException:kunde inte köra frågan ens via JNDI