- Este tópico contém 11 respostas, 3 vozes e foi atualizado pela última vez 16 anos, 8 meses atrás por
gugasoeu.
-
AutorPosts
-
2 de julho de 2009 às 5:06 pm #87664
gugasoeu
ParticipanteOlá pessoal, gostaria de saber como eu faço em oracle para quebrar os meus arquivos gerados em txt a cada 3 mil registro quebrar o arquivo e gerar outro.
2 de julho de 2009 às 5:59 pm #87667Marcio68Almeida
ParticipanteDentro do loop que gera o arquivo, na hora que o contador chegar no 3000 você começa um novo arquivo que deverá ter como nome
-.txt
Este contador vai sendo incrementado cada vez que gera um novo arquivo, não confundir como contador dos 3000 que deve ser reiniciado.2 de julho de 2009 às 6:05 pm #87669Leonardo Litz
ParticipanteNão se esqueca também de fechar o arquivo….
2 de julho de 2009 às 6:14 pm #87670gugasoeu
ParticipanteCerto Marcio.
Mais eu faço isso com o procedure?
Desculpa mais eu ainda sou um pouco leigo em Oracle estou aprendendo.
Obrigado
2 de julho de 2009 às 6:35 pm #87673Leonardo Litz
ParticipanteGuga, posta ai a procedure para gente ver….
2 de julho de 2009 às 6:41 pm #87674gugasoeu
ParticipanteLitz, eu estou extraindo as informações do meu banco da seguinte forma conforme o script que eu criei em sql abaixo:
–Data : 20/05/09
–Autor : Carlos Cesar
–Objetivo: Exportar arquivos referente a cadastro de cliente do MFG para 0800Net
–Projeto : Service Deskselect ‘USUARIO;DE_PARA;RAZAO_SOCIAL;NOME_FANTASIA;EMAIL;CONTATO;ENDERECO;COMPLEMENTO;BAIRRO;CIDADE;UF;CEP;PAIS;FONE;FONE2;CGC;IE;IM;STATUS;SENHA;TIPOCLIENTE;TIPOPESSOA’
from dual;
select ‘U’|| CUST_ID_D05||’;’||
CUST_ID_D05||’;’||
CUST_CNPJ_D05||’ ‘||CUST_ID_D05||’;’||
CUST_NAME_D05||’;’||
‘invalido@sherwin.com.br‘||’;’||
CUST_CONTATO_D05||’;’||
CUST_ADDRESS_D05||’;’||
DESCR_ERRO_D05||’;’||
CUST_BAIRRO_D05||’;’||
CUST_CITY_D05||’;’||
CUST_STATE_D05||’;’||
CUST_ZIP_COD_D05||’;’||
‘BRASIL’||’;’||
(replace(replace(replace(CUST_FONE1_D05,’.’,”),’-‘,”),’/’,”))||’;’||
(replace(replace(replace(CUST_FONE2_D05,’.’,”),’-‘,”),’/’,”))||’;’||
(replace(replace(replace(CUST_CNPJ_D05,’.’,”),’-‘,”),’/’,”))||’;’||
”||’;’||
”||’;’||
‘&vStatus’||’;’||
”||’;’||
decode(LENGTH(CUST_CNPJ_D05) ,14,’FISICA’,18,’JURIDICA’)||’;’||
decode(LENGTH(CUST_CNPJ_D05) ,14,’F’,18,’J’)
from maxd05
–where DATA_REC_D05 >= trunc(sysdate) – 2;2 de julho de 2009 às 6:44 pm #87675Leonardo Litz
ParticipanteEle já não gera um arquivo de texto unico?
2 de julho de 2009 às 6:48 pm #87677gugasoeu
ParticipanteEle gera um arquivo de texto único com 65.000 mil registro, eu preciso quebrar esse arquivo em 3.000 linhas para dar carga em um programa aqui da empresa.
2 de julho de 2009 às 8:07 pm #87683Leonardo Litz
ParticipanteTenta esse script:
declare
v_cont number := 0
r_FileHandle Utl_File.file_type;
v_aberto boolean :=false;
v_diretorio varchar2(200):= ‘C:/’;
v_nome_arquivo varchar2(40) := ‘teste’;
v_qtd_arquivo number:=0;
beginfor dd in (select ‘USUARIO;DE_PARA;RAZAO_SOCIAL;NOME_FANTASIA;EMAIL;CONTATO;ENDERECO;COMPLEMENTO;BAIRRO;CIDADE;UF;CEP;PAIS;FONE;FONE2;CGC;IE;IM;STATUS;SENHA;TIPOCLIENTE;TIPOPESSOA’
from dual;
select ‘U’|| CUST_ID_D05||’;’||
CUST_ID_D05||’;’||
CUST_CNPJ_D05||’ ‘||CUST_ID_D05||’;’||
CUST_NAME_D05||’;’||
‘invalido@sherwin.com.br‘||’;’||
CUST_CONTATO_D05||’;’||
CUST_ADDRESS_D05||’;’||
DESCR_ERRO_D05||’;’||
CUST_BAIRRO_D05||’;’||
CUST_CITY_D05||’;’||
CUST_STATE_D05||’;’||
CUST_ZIP_COD_D05||’;’||
‘BRASIL’||’;’||
(replace(replace(replace(CUST_FONE1_D05,’.’,”),’-‘,”),’/’,”))||’;’||
(replace(replace(replace(CUST_FONE2_D05,’.’,”),’-‘,”),’/’,”))||’;’||
(replace(replace(replace(CUST_CNPJ_D05,’.’,”),’-‘,”),’/’,”))||’;’||
”||’;’||
”||’;’||
‘&vStatus’||’;’||
”||’;’||
decode(LENGTH(CUST_CNPJ_D05) ,14,’FISICA’,18,’JURIDICA’)||’;’||
decode(LENGTH(CUST_CNPJ_D05) ,14,’F’,18,’J’) as linha
from maxd05) loopif(v_cont = 0)then ---abre o arquivo r_FileHandle := utl_file.fopen(v_diretorio, v_nome_arquivo||'_'||v_qtd_arquivo , 'w'); v_aberto := true; end if; ---cria as linhas no arquivo utl_file.put_line(r_FileHandle, dd.linha); ---incrementa o contador v_cont := v_cont + 1; if(v_cont = 3000)then --fecha o arquivo utl_file.fflush(r_FileHandle); utl_file.fclose(r_FileHandle); v_aberto := false; v_cont := 0; end if;end loop;
—fecha o arquivo
if(v_aberto)then
utl_file.fflush(r_FileHandle);
utl_file.fclose(r_FileHandle);
end if;end;
2 de julho de 2009 às 9:47 pm #87687gugasoeu
ParticipanteLitz, fiz umas pequenas alterações que agora funcionou, segue abaixo o código:
declare
v_cont number := 0;
r_FileHandle Utl_File.file_type;
v_aberto boolean :=false;
v_diretorio varchar2(200):= ‘PROJETOS’;
v_nome_arquivo varchar2(40) := ‘teste’;
v_qtd_arquivo number:=0;
beginfor dd in (select ‘USUARIO;DE_PARA;RAZAO_SOCIAL;NOME_FANTASIA;EMAIL;CONTATO;ENDERECO;COMPLEMENTO;BAIRRO;CIDADE;UF;CEP;PAIS;FONE;FONE2;CGC;IE;IM;STATUS;SENHA;TIPOCLIENTE;TIPOPESSOA’ linha
from dual
union all
select ‘U’|| CUST_ID_D05||’;’||
CUST_ID_D05||’;’||
CUST_CNPJ_D05||’ ‘||CUST_ID_D05||’;’||
CUST_NAME_D05||’;’||
‘invalido@sherwin.com.br‘||’;’||
CUST_CONTATO_D05||’;’||
CUST_ADDRESS_D05||’;’||
DESCR_ERRO_D05||’;’||
CUST_BAIRRO_D05||’;’||
CUST_CITY_D05||’;’||
CUST_STATE_D05||’;’||
CUST_ZIP_COD_D05||’;’||
‘BRASIL’||’;’||
(replace(replace(replace(CUST_FONE1_D05,’.’,”),’-‘,”),’/’,”))||’;’||
(replace(replace(replace(CUST_FONE2_D05,’.’,”),’-‘,”),’/’,”))||’;’||
(replace(replace(replace(CUST_CNPJ_D05,’.’,”),’-‘,”),’/’,”))||’;’||
”||’;’||
”||’;’||
‘A’||’;’||
”||’;’||
decode(LENGTH(CUST_CNPJ_D05) ,14,’FISICA’,18,’JURIDICA’)||’;’||
decode(LENGTH(CUST_CNPJ_D05) ,14,’F’,18,’J’)
from maxd05 where DATA_REC_D05 >=trunc(sysdate)-2 )
loopif(v_cont = 0)then
—abre o arquivo
r_FileHandle := utl_file.fopen(v_diretorio, v_nome_arquivo||’_’||v_qtd_arquivo , ‘w’);
v_aberto := true;
end if;—cria as linhas no arquivo
utl_file.put_line(r_FileHandle, dd.linha);
—incrementa o contador
v_cont := v_cont + 1;if(v_cont = 100)then
–fecha o arquivo
utl_file.fflush(r_FileHandle);
utl_file.fclose(r_FileHandle);
v_aberto := false;
v_cont := 0;
v_qtd_arquivo := v_qtd_arquivo + 1;
end if;end loop;
—fecha o arquivo
if(v_aberto)then
utl_file.fflush(r_FileHandle);
utl_file.fclose(r_FileHandle);
end if;end;
/2 de julho de 2009 às 10:43 pm #87692Leonardo Litz
ParticipanteOlá Guga, realmente como eu não tinha testado por aqui, fiz só no olhometro esqueci de colocar um incrementador no sufixo do arquivo…
Mas blz… espero ter te ajuda… abracos.
3 de julho de 2009 às 11:05 pm #87718gugasoeu
ParticipanteAjudou muito, valeu meu brother.
-
AutorPosts
- Você deve fazer login para responder a este tópico.