Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

UTL_FILE.WRITE_ERROR khi gọi utl_file.put trong một vòng lặp

  1. Đăng phiên bản Oracle mà bạn đang sử dụng! Hoặc chúng ta chỉ có thể đoán xung quanh ...

  2. fflush của bạn sẽ không hoạt động như bạn mong đợi - Từ tài liệu :

    FFLUSH vật lý ghi dữ liệu đang chờ xử lý vào tệp được xác định bởi trình xử lý tệp. Thông thường, dữ liệu được ghi vào tệp được lưu vào bộ đệm. Quy trình FFLUSH buộc dữ liệu được lưu trong bộ đệm phải được ghi vào tệp. Dữ liệu phải được kết thúc bằng ký tự dòng mới.

  3. tbone hoàn toàn đúng, dòng TO_CHAR (10) là sai! Chỉ cần thử SELECT TO_CHAR(10) FROM DUAL; bạn sẽ nhận được 10 mà sau đó bạn so sánh với một ký tự. Một ký tự sẽ không bao giờ là '10' vì 10 có hai ký tự!

  4. Vấn đề của bạn rất có thể là tràn bộ đệm với các Tệp XML quá lớn, nhưng hãy lưu ý, các vấn đề khác trên hệ thống đích cũng có thể dẫn đến lỗi write_errors, cần được xử lý.

Giải pháp

  • Nhanh &Bẩn :Vì bạn dường như không quan tâm đến hiệu suất, bạn có thể chỉ cần đóng tệp mỗi byte X và mở lại nó bằng A để thêm vào. Vì vậy, chỉ cần thêm vào vòng lặp:

    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;
    
  • Sử dụng đúng công cụ cho đúng công việc:UTL_FILE không thích hợp để xử lý dữ liệu phức tạp. Usecase duy nhất cho UTL_FILE là các dòng văn bản nhỏ được phân tách bằng dòng mới. Đối với mọi thứ khác, bạn nên viết byte RAW! (Điều này cũng sẽ cho phép bạn kiểm soát khuân vác đối với ENCODING, hiện chỉ là trò đoán may rủi nhỏ)

  • Viết một Java-Stored-Procedure với NIO-Filechannels - nhanh, an toàn, đẹp ... Nhưng hãy cẩn thận, chương trình của bạn có thể chạy nhanh gấp 10 lần!



  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 cách nhập các lớp java bị thiếu khi gọi java từ plsql

  2. Nối kết quả từ một truy vấn SQL trong Oracle

  3. Oracle SQL cho Ngày làm việc Cuối cùng của Tháng Hiện tại bao gồm các ngày lễ liên bang ở oracle

  4. Tính toán chênh lệch thời gian trong SQL với sự thay đổi

  5. Từ XML đến danh sách các đường dẫn trong Oracle 12c