-
Poste a Versão do Oracle que está usando! Ou podemos apenas adivinhar...
-
Seufflush
não funcionará como você espera - Da documentação :
FFLUSH grava fisicamente os dados pendentes no arquivo identificado pelo identificador de arquivo. Normalmente, os dados que estão sendo gravados em um arquivo são armazenados em buffer. O procedimento FFLUSH força os dados armazenados em buffer a serem gravados no arquivo. Os dados devem ser encerrados com um caractere de nova linha.
-
tbone está absolutamente certo a linha TO_CHAR(10) está errada! Apenas tenteSELECT TO_CHAR(10) FROM DUAL;
você receberá10
que você compara a um único caractere. Um único caractere nunca será '10', pois 10 tem dois caracteres!
-
Seu problema provavelmente é um estouro de buffer com arquivos XML muito grandes, mas lembre-se de que outros problemas no sistema de destino podem levar a erros de gravação, que devem ser tratados.
Soluções
-
Rápido e sujo :Como você não parece se importar com o desempenho de qualquer maneira, basta fechar o arquivo a cada byte X e reabri-lo com A para anexar. Então, basta adicionar ao 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;
-
Use a ferramenta certa para o trabalho certo:UTL_FILE
não é adequado para lidar com dados complexos. O único caso de uso para UTL_FILE são pequenas linhas de texto separadas por nova linha. Para todo o resto você deve escrever bytes RAW! (O que também permitirá que você controle porper sobre ENCODING, que atualmente é apenas um palpite de sorte)
-
Escreva um Java-Stored-Procedure com NIO-Filechannels - rápido, seguro, agradável... Mas cuidado, seu programa pode rodar 10 vezes mais rápido!