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]