sql >> Database >  >> RDS >> Oracle

UTL_FILE.WRITE_ERROR bij het aanroepen van utl_file.put in een lus

  1. Post de Oracle-versie die u gebruikt! Of we kunnen gewoon gissen...

  2. Je fflush zal niet werken zoals u verwacht - Uit de documentatie :

    FFLUSH schrijft fysiek wachtende gegevens naar het bestand dat wordt geïdentificeerd door de bestandshandle. Normaal gesproken worden gegevens die naar een bestand worden geschreven, gebufferd. De FFLUSH-procedure dwingt de gebufferde gegevens naar het bestand te schrijven. De gegevens moeten worden afgesloten met een teken voor een nieuwe regel.

  3. tbone heeft absoluut gelijk, de regel TO_CHAR (10) is verkeerd! Probeer gewoon SELECT TO_CHAR(10) FROM DUAL; je krijgt 10 die u vervolgens vergelijkt met een enkel teken. Een enkel teken zal nooit '10' zijn, aangezien 10 twee tekens heeft!

  4. Uw probleem is hoogstwaarschijnlijk een buffer-overflow met te grote XML-bestanden, maar houd er rekening mee dat ook andere problemen op het doelsysteem kunnen leiden tot write_errors, die moeten worden afgehandeld.

Oplossingen

  • Quick&Dirty :Aangezien je toch niet om prestaties lijkt te geven, kun je het bestand gewoon elke X-byte sluiten en het opnieuw openen met A om toe te voegen. Dus voeg gewoon toe aan de lus:

    IF MOD( l_offset, 32000 ) = 0
    THEN
      UTL_FILE.FCLOSE( f_out );
      UTL_FILE.FOPEN( out_fpath, out_fname, f_out, 'a', 32767 );
    END IF;
    
  • Gebruik de juiste tool voor de juiste taak:UTL_FILE is niet geschikt voor het verwerken van complexe gegevens. De enige usecase voor UTL_FILE zijn kleine, door nieuwe regels gescheiden tekstregels. Voor al het andere moet je RAW-bytes schrijven! (Waarmee je ook controle hebt over ENCODING, wat momenteel slechts mini-vanilly-lucky-guess is)

  • Schrijf een Java-Stored-Procedure met NIO-Filechannels - snel, veilig, leuk... Maar pas op, je programma loopt misschien wel 10 keer zo snel!



  1. Aantal SQL Server is traag

  2. Wat betekent Tabel niet optimaliseren, in plaats daarvan opnieuw maken + analyseren?

  3. Hoe stel ik PostgreSQL in voor Play 2.0?

  4. NUMTODSINTERVAL() Functie in Oracle