› Fóruns › SQL e PL/SQL › Duvida – String com caracteres › Duvida – String com caracteres
Doug, o erro não está o no put.
Fiz alguns testes, e dei umas pesquisadas, porque de inicio não fazia sentido dar erro.
UTL_FILE.FOPEN (
location IN VARCHAR2,
filename IN VARCHAR2,
open_mode IN VARCHAR2,
max_linesize IN BINARY_INTEGER)
RETURN file_type;
max_linesize é o tamanho maximo de cada linha, incluindo o caracter de nova linha, logo temos 32767 bytes, que é igual a 31k menos 1b, max_linesize pode ir de 1 a 32767. Se não especificado o padrão é 1024.
O erro acontece no UTL_FILE.FCLOSE. Ao fechar o arquivo a linha é maior que o suportado, então da erro de escrita.
Como existe essa limitação de 31k menos 1b, não será possível por os 200k como desejado direto.
Uma alternativa é abrir o arquivo inicialmente em modo ‘W’ fechar o arquivo em seguida abrir o arquivo em modo ‘A’ e fecha lo novamente, desta forma é só fazer um loop ate terminar a linha.
Creio que a escrita no arquivo é feita no FCLOSE e não no PUT.
Segue um teste que eu fiz:
create or replace directory diretorio as 'c:temp';
create or replace procedure prc_save_text_archive(directory in Varchar2,name_archive in Varchar2) is
text_archive utl_file.file_type;
text varchar(30720);
trinta_k_bytes number;
begin
trinta_k_bytes := 30720;
/*salvando 30k*/
text_archive := utl_file.fopen(directory,name_archive,'w',32767);
for i in 1..trinta_k_bytes
loop
text := text || '1' ;
end loop;
utl_file.put(text_archive,text);
utl_file.fclose(text_archive);
/*salvando 60k*/
text_archive := utl_file.fopen(directory,name_archive,'a',32767);
text := null;
for i in 1..trinta_k_bytes
loop
text := text || '0' ;
end loop;
utl_file.put(text_archive,text);
utl_file.fclose(text_archive);
/*salvando 90k*/
text_archive := utl_file.fopen(directory,name_archive,'a',32767);
text := null;
for i in 1..trinta_k_bytes
loop
text := text || '1' ;
end loop;
utl_file.put(text_archive,text);
utl_file.fclose(text_archive);
end prc_save_text_archive;
call prc_save_text_archive('DIRETORIO','TESTE.TXT');