sql >> Database >  >> RDS >> Oracle

Oracle BLOB-extractie erg traag

Ik ben er vrij zeker van dat je aan het begin van de procedure niet alle BLOB's in een array moet ophalen. Aangezien u de BLOB-gegevens leest en nooit een lob-locator sluit, moet Oracle al deze informatie in het geheugen bewaren. Ik vermoed dat dit een geval van overvol geheugen is.

Probeer in plaats daarvan dit:

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. Probleem bij het toevoegen van Foreign Key met behulp van Alter Table met bestaande MYSQL-database - kan het niet toevoegen! Helpen!

  2. Hoe kan ik meerdere rijen invoegen in orakel met een reekswaarde?

  3. Hoe een tabel als een out-parameter in Oracle te krijgen

  4. Oracle-rijtelling van tabel per telling(*) versus NUM_ROWS van DBA_TABLES