-
Post de Oracle-versie die u gebruikt! Of we kunnen gewoon gissen...
-
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.
-
tbone heeft absoluut gelijk, de regel TO_CHAR (10) is verkeerd! Probeer gewoon
SELECT TO_CHAR(10) FROM DUAL;
je krijgt10
die u vervolgens vergelijkt met een enkel teken. Een enkel teken zal nooit '10' zijn, aangezien 10 twee tekens heeft! -
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!