-
¡Publique la versión de Oracle que está utilizando! O simplemente podemos adivinar...
-
Su
fflush
no funcionará como espera:de la documentación :FFLUSH escribe físicamente los datos pendientes en el archivo identificado por el identificador de archivo. Normalmente, los datos que se escriben en un archivo se almacenan en búfer. El procedimiento FFLUSH obliga a que los datos almacenados en el búfer se escriban en el archivo. Los datos deben terminar con un carácter de nueva línea.
-
¡Tbone tiene toda la razón, la línea TO_CHAR(10) está mal! Prueba
SELECT TO_CHAR(10) FROM DUAL;
obtendrás10
que luego comparas con un solo personaje. ¡Un solo carácter nunca será '10' ya que 10 tiene dos caracteres! -
Lo más probable es que su problema sea un desbordamiento de búfer con archivos XML demasiado grandes, pero tenga en cuenta que también otros problemas en el sistema de destino pueden generar errores de escritura, que deben manejarse.
Soluciones
-
Rápido y Sucio :Dado que no parece importarle el rendimiento de todos modos, puede cerrar el archivo cada X byte y volver a abrirlo con A para agregar. Así que simplemente agregue al ciclo:
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;
-
Utilice la herramienta adecuada para el trabajo adecuado:
UTL_FILE
no es adecuado para el manejo de datos complejos. El único caso de uso para UTL_FILE son pequeñas líneas de texto separadas por saltos de línea. ¡Para todo lo demás, debe escribir bytes RAW! (Lo que también le permitirá tener un control pormenorizado sobre la CODIFICACIÓN, que actualmente es solo una pequeña adivinanza). -
Escriba un procedimiento almacenado en Java con NIO-Filechannels:rápido, seguro, agradable... ¡Pero tenga cuidado, su programa podría ejecutarse 10 veces más rápido!