-
Posting Versi Oracle yang Anda gunakan! Atau kita bisa menebak-nebak...
-
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.
-
tbone benar-benar benar, baris TO_CHAR(10) salah! Coba saja
SELECT TO_CHAR(10) FROM DUAL;
anda akan mendapatkan10
yang kemudian Anda bandingkan dengan satu karakter. Satu karakter tidak akan pernah menjadi '10' karena 10 memiliki dua karakter! -
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!