Oracle
 sql >> Baza danych >  >> RDS >> Oracle

UTL_FILE.WRITE_ERROR podczas wywoływania utl_file.put w pętli

  1. Opublikuj wersję Oracle, której używasz! Albo możemy po prostu zgadywać...

  2. 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.

  3. tbone ma rację, linia TO_CHAR(10) jest błędna! Po prostu spróbuj SELECT TO_CHAR(10) FROM DUAL; otrzymasz 10 które następnie porównujesz do jednego znaku. Pojedynczy znak nigdy nie będzie „10”, ponieważ 10 ma dwa znaki!

  4. 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!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle PL/SQL:Przykład DBMS_SCHEDULER.CREATE_JOB

  2. ORA-30926 - Scal stan

  3. Błąd odpytywania KGXGN (15)

  4. Czy można wykonać funkcję grupowania bitowego?

  5. aktualny błąd podczas używania substr