-
Posten Sie die Oracle-Version, die Sie verwenden! Oder wir können einfach herumraten...
-
Ihr
fflush
funktioniert nicht wie erwartet - Aus der Dokumentation :FFLUSH schreibt anstehende Daten physisch in die Datei, die durch die Dateikennung identifiziert wird. Normalerweise werden Daten, die in eine Datei geschrieben werden, gepuffert. Die FLUSH-Prozedur erzwingt das Schreiben der gepufferten Daten in die Datei. Die Daten müssen mit einem Newline-Zeichen abgeschlossen werden.
-
tbone ist absolut richtig, die Zeile TO_CHAR(10) ist falsch! Versuchen Sie einfach
SELECT TO_CHAR(10) FROM DUAL;
Sie erhalten10
die Sie dann mit einem einzelnen Zeichen vergleichen. Ein einzelnes Zeichen wird niemals '10' sein, da 10 zwei Zeichen hat! -
Ihr Problem ist höchstwahrscheinlich ein Pufferüberlauf mit zu großen XML-Dateien, aber denken Sie daran, dass auch andere Probleme auf dem Zielsystem zu Write_errors führen können, die behandelt werden sollten.
Lösungen
-
Quick&Dirty :Da Sie sich anscheinend sowieso nicht um die Leistung kümmern, können Sie die Datei einfach alle X-Byte schließen und mit A für Anhängen erneut öffnen. Fügen Sie also einfach zur Schleife hinzu:
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;
-
Verwenden Sie das richtige Tool für den richtigen Job:
UTL_FILE
ist für den Umgang mit komplexen Daten nicht geeignet. Der einzige Anwendungsfall für UTL_FILE sind kleine durch Zeilenumbrüche getrennte Textzeilen. Für alles andere sollten Sie RAW-Bytes schreiben! (Was Ihnen auch eine bessere Kontrolle über ENCODING ermöglicht, was derzeit nur eine Mini-Vanilly-Glücksvermutung ist) -
Schreiben Sie eine Java-Stored-Procedure mit NIO-Filechannels - schnell, sicher, nett... Aber Vorsicht, Ihr Programm könnte 10 mal so schnell laufen!