Obrigado Chiappa, vou validar.

 

Carlos

 

De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em
nome de J. Laurindo Chiappa
Enviada: quarta-feira, 18 de Julho de 2012 15:52
Para: oracle_br@yahoogrupos.com.br
Assunto: [oracle_br] Re: Ficheiros TXT

 

  

Colega, é quase certo que esse PUT_LINE fora do LOOP não faz sentido :
normalmente o cursor é lido linha-a-linha dentro do cursor, então apenas
para cada linha lida é que vc precisa gravar no arquivo, então creio que
essa gravação feita pelo PUT_LINE de fora do cursor é que tá fazendo a
caca.... Outra coisa é esse negócio de se ter o FOPEN dentro do loop
(imagino que vc faz isso pra só abrir o arquivo se realmente tem dados, mas
talvez seja mais simples vc apenas remover o arquivo criado se não tinha
dados), de se quebrar cada coluna em variáveis diferentes (que vc chama de
v_linha 1 e 2), embora não seja por si só errado isso é o Veículo preferido
dos bugs, lógicas desnecessariamente complexas são um prato cheio pros bugs
...
A lógica simples e funcional penso que seria + ou - :

....
v_contador := 0;
v_ficheiro_UTL_ftp := UTL_FILE.FOPEN(v_directorio_ftp, v_directorio_remote
|| v_nome_ficheiro_ftp, 'W');
FOR r in c LOOP
v_contador := v_contador + 1;
UTL_FILE.PUT_LINE(v_ficheiro_UTL_ftp, r.d || r.v);
END LOOP;
UTL_FILE.FCLOSE(v_ficheiro_UTL);
if v_contador = 0 then
utl_file.FREMOVE(v_directorio_ftp, v_directorio_remote ||
v_nome_ficheiro_ftp);
end if;

okdoc ??

[]s

Chiappa

--- Em oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br>
, "Carlos Pinto" <carlos.pintoo@...> escreveu
>
> Obrigado Chiappa.
> 
> 
> 
> Praticamente é isto:
> 
> 
> 
> 
> 
> FOR r in c LOOP
> 
> 
> 
> if not v_ficheiro_criado_ftp then
> 
> 
> 
> v_linha := null;
> 
> 
> 
> v_ficheiro_criado_ftp := TRUE;
> 
> v_nome_ficheiro_ftp := v_filename1_ftp;
> 
> v_ficheiro_UTL_ftp := UTL_FILE.FOPEN(v_directorio_ftp,
> v_directorio_remote || v_nome_ficheiro_ftp, 'W');
> 
> end if;
> 
> 
> 
> v_contador := v_contador + 1; 
> 
> 
> 
> v_linha1 := r.d; 
> 
> v_linha2 := r.v; 
> 
> 
> 
> v_linha := v_linha1 || v_linha2;
> 
> 
> 
> UTL_FILE.PUT_LINE(v_ficheiro_UTL_ftp, v_linha);
> 
> 
> 
> END LOOP;
> 
> 
> 
> v_linha := v_contador;
> 
> 
> 
> UTL_FILE.PUT_LINE(v_ficheiro_UTL_ftp, v_linha);
> 
> 
> 
> END IF;
> 
> 
> 
> 
> 
> if v_ficheiro_criado then
> 
> UTL_FILE.FCLOSE(v_ficheiro_UTL);
> 
> end if;
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Carlos
> 
> 
> 
> 
> 
> 
> 
> De: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br>
[mailto:oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br>
] Em
> nome de J. Laurindo Chiappa
> Enviada: quarta-feira, 18 de Julho de 2012 15:16
> Para: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br>

> Assunto: [oracle_br] Re: Ficheiros TXT
> 
> 
> 
> 
> 
> Colega, com ABSOLUTA certeza a UTL_FILE certamente *** não *** possui por
si
> só essa característica de enfiar por conta própria linhas em branco no
> final, nem há um bug específico que eu conheça e implique nisso... Então,
é
> praticamente certo que é um erro na tua lógica de programação : cria um
> exemplo o mais CURTO possível , com os DDLs e DMLs necessários inclusive,
> que a gente te indica aonde pode estar o problema...
> 
> []s
> 
> Chiappa
> 
> --- Em oracle_br@yahoogrupos.com.br
<mailto:oracle_br%40yahoogrupos.com.br>
<mailto:oracle_br%40yahoogrupos.com.br>
> , "Carlos Pinto" <carlos.pintoo@> escreveu
> >
> > Ola a todos estou a utilizar ORACLE 10G.
> > 
> > 
> > 
> > A minha questão é o seguinte:
> > 
> > 
> > 
> > Estou a utilizar o UTL_FILE para gerar ficheiros txt. Funciona todo bem
> com
> > a excepção do final que coloca sempre duas linhas em branco. Como posso
> > eliminar estas linhas?
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > Com os melhores cumprimentos, 
> > 
> > Carlos Pinto
> > 
> > 
> > 
> > 
> > 
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> 
> 
> 
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>





[As partes desta mensagem que não continham texto foram removidas]

Responder a