-
Opublikuj wersję Oracle, której używasz! Albo możemy po prostu zgadywać...
-
Twój
fflush
nie będzie działać zgodnie z oczekiwaniami — z dokumentacji :FLLUSH fizycznie zapisuje oczekujące dane do pliku identyfikowanego przez uchwyt pliku. Normalnie dane zapisywane do pliku są buforowane. Procedura FLLUSH wymusza zapisanie zbuforowanych danych do pliku. Dane muszą być zakończone znakiem nowej linii.
-
tbone ma rację, linia TO_CHAR(10) jest błędna! Po prostu spróbuj
SELECT TO_CHAR(10) FROM DUAL;
otrzymasz10
które następnie porównujesz do jednego znaku. Pojedynczy znak nigdy nie będzie „10”, ponieważ 10 ma dwa znaki! -
Twoim problemem jest najprawdopodobniej przepełnienie bufora ze zbyt dużymi plikami XML, ale pamiętaj, że również inne problemy w systemie docelowym mogą prowadzić do błędów zapisu, które należy rozwiązać.
Rozwiązania
-
Szybko i brudno :Ponieważ i tak nie przejmujesz się wydajnością, możesz po prostu zamknąć plik co X bajt i ponownie go otworzyć za pomocą A do dołączenia. Więc po prostu dodaj do pętli:
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;
-
Użyj odpowiedniego narzędzia do właściwego zadania:
UTL_FILE
nie nadaje się do obsługi złożonych danych. Jedynym przypadkiem użycia UTL_FILE są małe wiersze tekstu oddzielone znakami nowej linii. Do wszystkiego innego powinieneś pisać bajty RAW! (Co pozwoli ci również na lepszą kontrolę nad KODOWANIEM, które obecnie jest tylko mini-szczęściem-zgadywaniem) -
Napisz procedurę przechowywaną w języku Java z kanałami plików NIO - szybko, bezpiecznie, przyjemnie... Ale bądź ostrożny, Twój program może działać 10 razy szybciej!