Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

UTL_FILE.WRITE_ERROR saat memanggil utl_file.put dalam satu lingkaran

  1. Posting Versi Oracle yang Anda gunakan! Atau kita bisa menebak-nebak...

  2. fflush . Anda tidak akan bekerja seperti yang Anda harapkan - Dari dokumentasi :

    FFLUSH secara fisik menulis data yang tertunda ke file yang diidentifikasi oleh pegangan file. Biasanya, data yang ditulis ke file di-buffer. Prosedur FFLUSH memaksa data buffer ditulis ke file. Data harus diakhiri dengan karakter baris baru.

  3. tbone benar-benar benar, baris TO_CHAR(10) salah! Coba saja SELECT TO_CHAR(10) FROM DUAL; anda akan mendapatkan 10 yang kemudian Anda bandingkan dengan satu karakter. Satu karakter tidak akan pernah menjadi '10' karena 10 memiliki dua karakter!

  4. Masalah Anda kemungkinan besar adalah buffer-overflow dengan File XML yang terlalu besar, tetapi perlu diingat, juga masalah lain pada sistem target dapat menyebabkan write_errors, yang harus ditangani.

Solusi

  • Cepat&Kotor :Karena Anda tampaknya tidak peduli dengan kinerja, Anda bisa menutup file setiap X byte dan membukanya kembali dengan A untuk ditambahkan. Jadi tambahkan saja ke loop:

    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;
    
  • Gunakan alat yang tepat untuk pekerjaan yang tepat:UTL_FILE tidak cocok untuk menangani data yang kompleks. Satu-satunya usecase untuk UTL_FILE adalah baris teks kecil yang dipisahkan baris baru. Untuk yang lainnya, Anda harus menulis byte RAW! (Yang juga akan memungkinkan Anda mengontrol ENCODING, yang saat ini hanya tebak-tebakan mini-vanilly)

  • Tulis Java-Stored-Procedure dengan NIO-Filechannels - cepat, aman, bagus... Tapi hati-hati, program Anda mungkin berjalan 10 kali lebih cepat!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengulang kolom di kursor Oracle pl/sql

  2. Jumlah atau jenis kesalahan argumen yang salah saat memanggil prosedur

  3. Fungsi NLS_CHARSET_ID() di Oracle

  4. java.lang.ClassCastException:Oracle.sql.TIMESTAMP tidak dapat dilemparkan ke java.sql.Timestamp

  5. Bagaimana caranya:Grails 3.0.2 + Oracle Database 12c?