Cria procedures ou Package exporta TXT

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
belloo123
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Ter, 08 Nov 2016 10:40 am

Boa Tarde, sou novo aqui e tenho conhecimento um pititico melhor que o básico rs.
Mais Com ajuda de Você posso subir mais um degrau !

Vamos la tenho hoje uma tabela onde recebo todo um arquivo txt, porem depois de fazer as alterações da mesma preciso exporta para txt delimitado por '|', ate aqui tranquilo problema e o sequinte :

A tabela hoje consistem em 42 colunas , porem na exportacao nem todas as linhas teram que ser exportada com 42 colunas
explo:

Selecionar tudo

select *
  from(
SELECT a,b,c,d,sequencia FROM RODOX_TABELA_SPED A
ORDER BY SEQUENCIA )
WHERE ROWNUM < 6
colunas a ,b,c,d sequencia SEPAREI POR | PAR MELHOR VISUALIZAÇÃO

Selecionar tudo

linha 1 -- |0001|0|||1|
linha 2 -- |0100|WALESKA QUEIROZ CARDOSO|22760474100|4083|2|
linha 3 -- |0110|3|1|1|3|
linha 4 -- |0140|23403611000186||CARPAL TRATORES LTDA|23403611000186|4|
gostaria que na hora de exporta os dados eu pudesse informar que tudo q na
COM O REGISTRO '0001' NA COLUNA A(COLUNA A ONDE FICA a consulta)só vinhe-se a coluna A,B, FICANDO
|0001|0| .
com registro '0100' so vine-se a coluna a,b,c,d ficando

Selecionar tudo

|0100|WALESKA QUEIROZ CARDOSO|22760474100|4083|
com registro '0110' so vine-se a coluna a,b,c ficando
|0110|3|1| e assim sucessivamente ,
que possa escreve as forma q cada registro vai ser escrito no arquivo.
spernega
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 228
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

Bom dia,

Você pode usar o decode ou o case, se forem poucos códigos

Selecionar tudo

select decode(a, '0001',a||'|'||b||'|'||c,
                      '0100',a||'|'||b||'|') linha
from   tabela
mais ou menos isso, mas só se foram poucos códigos.
belloo123
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Ter, 08 Nov 2016 10:40 am

Certo e uma boa alternativa o decode como o case when, mais uma breve consulta hj estou falando de
coluna 'A' onde seria a base
coluna a e quantidade na frente nesse caso seriam 62 case when diversificados.

Selecionar tudo

0001	1
0100	1
0110	1
0140	4
0150	998
0190	4
0200	4744
0400	71
0450	47
0990	1
1001	1
1990	1
9001	1
9900	63
9990	1
9999	1
A001	1
A010	4
A100	227
A170	359
A990	1
C001	1
C010	4
C100	2098
C110	47
C170	9042
C990	1
D001	1
D010	4
D100	70
D101	70
D105	70
D990	1
F001	1
F010	4
F100	18
F120	5
F990	1
I001	1
I990	1
M001	1
M100	1
M105	6
M110	3
M115	3
M200	1
M205	2
M210	2
M400	2
M410	3
M500	1
M505	6
M510	3
M515	3
M600	1
M605	2
M610	2
M800	2
M810	3
M990	1
P001	1
P990	1
spernega
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 228
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

Vixi...

Neste caso seria mais fácil criar uma tabela para gerenciar isso.
belloo123
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Ter, 08 Nov 2016 10:40 am

exato queria cria uma função no qual já quarda as informações
tipo: tudo que for 0100 , trazer coluna a,b,c,d,
tudo que for 0000 trazer tabela a,b etc

e um utl_file já fazendo a consulta e gravando o arquivo .

porem não sei nem para onde começar para criar isso .
spernega
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 228
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

Bom dia,

Manda o script de criação desta tabela, e se possível alguns inserts.
Vamos ver o que eu consigo te ajuda.
belloo123
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Ter, 08 Nov 2016 10:40 am

Obrigado a todos conseguir fazer dessa forma meu codigo onde atendeu o que precisava , caso alguém queira opinar ou melhorar , agradeço.

Selecionar tudo

  DECLARE
    arquivo_saida UTL_File.File_Type; 
  Cursor Cur_Linha is select 
 
case
  when a = '0000' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||e||'|'||f||'|'||g||'|'||h||'|'||i||'|'||j||'|'||l||'|'||m||'|'||n||'|'||o||'|'
  when a = '0001' then '|'||a||'|'||b||'|'
  when a = '0100' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||e||'|'||f||'|'||g||'|'||h||'|'||i||'|'||j||'|'||l||'|'||m||'|'||n||'|'||o||'|'
  when a = '0110' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||e||'|'
  when a = '0140' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||e||'|'||f||'|'||g||'|'||h||'|'||i||'|'
  when a = '0150' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||e||'|'||f||'|'||g||'|'||h||'|'||i||'|'||j||'|'||l||'|'||m||'|'||n||'|'
  when a = '0190' then '|'||a||'|'||b||'|'||c||'|'
  when a = '0200' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||e||'|'||f||'|'||g||'|'||h||'|'||i||'|'||j||'|'||l||'|'||m||'|'
  when a = '0400' then '|'||a||'|'||b||'|'||c||'|'
  when a = '0450' then '|'||a||'|'||b||'|'||c||'|'
  when a = '0140' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||e||'|'||f||'|'||g||'|'||h||'|'
  when a = '0990' then '|'||a||'|'||b||'|'
  when a = 'A001' then '|'||a||'|'||b||'|'
  when a = 'A990' then '|'||a||'|'||b||'|'
  when a = 'C001' then '|'||a||'|'||b||'|' 
  when a = 'C010' then '|'||a||'|'||b||'|'||c||'|'
  when a = 'C100' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||e||'|'||f||'|'||g||'|'||h||'|'||i||'|'||j||'|'||l||'|'||m||'|'||n||'|'||o||'|'||p||'|'||q||'|'|| r||'|'|| s||'|'|| t||'|'|| u||'|'|| v||'|'|| x||'|'|| z||'|'|| aa||'|'|| ab||'|'|| ac||'|'|| ad||'|'|| aí||'|'|| af||'|'
  when a = 'C110' then '|'||a||'|'||b||'|'||c||'|'
  when a = 'C170' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||e||'|'||f||'|'||g||'|'||h||'|'||i||'|'||j||'|'||l||'|'||m||'|'||n||'|'||o||'|'||p||'|'||q||'|'|| r||'|'|| s||'|'|| t||'|'|| u||'|'|| v||'|'|| x||'|'|| z||'|'|| aa||'|'|| ab||'|'|| ac||'|'|| ad||'|'|| aí||'|'|| af||'|'|| ag||'|'|| ah||'|'|| ai||'|'|| aj||'|'|| al||'|'|| am||'|'|| an||'|'|| ao||'|'
  when a = 'C400' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||e||'|'
  when a = 'C405' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||e||'|'||F||'|'||g||'|'  
  when a = 'C481' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||e||'|'||F||'|'||g||'|'||h||'|'||i||'|'||j||'|'
  when a = 'C485' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||e||'|'||F||'|'
  when a = 'C990' then '|'||a||'|'||b||'|'  
  when a = 'D001' then '|'||a||'|'||b||'|' 
  when a = 'D990' then '|'||a||'|'||b||'|'
  when a = 'F001' then '|'||a||'|'||b||'|' 
  when a = 'F990' then '|'||a||'|'||b||'|' 
  when a = 'I001' then '|'||a||'|'||b||'|' 
  when a = 'I990' then '|'||a||'|'||b||'|'
  when a = 'M001' then '|'||a||'|'||b||'|'  
  when a = 'M200' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||e||'|'||f||'|'||g||'|'||h||'|'||i||'|'||j||'|'||l||'|'||m||'|'||n||'|'
  when a = 'M205' then '|'||a||'|'||b||'|'||c||'|'||d||'|'
  when a = 'M210' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||e||'|'||f||'|'||g||'|'||h||'|'||i||'|'||j||'|'||l||'|'||m||'|'||n||'|'
  when a = 'M400' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||E||'|'
  when a = 'M410' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||E||'|'
  when a = 'M600' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||e||'|'||f||'|'||g||'|'||h||'|'||i||'|'||j||'|'||l||'|'||m||'|'||n||'|'
  when a = 'M605' then '|'||a||'|'||b||'|'||c||'|'||d||'|'
  when a = 'M610' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||e||'|'||f||'|'||g||'|'||h||'|'||i||'|'||j||'|'||l||'|'||m||'|'||n||'|'
  when a = 'M800' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||E||'|'
  when a = 'M810' then '|'||a||'|'||b||'|'||c||'|'||d||'|'||E||'|'
  when a = 'M990' then '|'||a||'|'||b||'|'
  when a = 'P001' then '|'||a||'|'||b||'|'
  when a = 'P990' then '|'||a||'|'||b||'|'
  when a = '1001' then '|'||a||'|'||b||'|'
  when a = '1990' then '|'||a||'|'||b||'|'
  when a = '9001' then '|'||a||'|'||b||'|'
  when a = '9900' then '|'||a||'|'||b||'|'||C||'|'
  when a = '9990' then '|'||a||'|'||b||'|'
  when a = '9999' then '|'||a||'|'||b||'|'
   
   else a end AS SPED  from rodox_tabela_sped_presumido c 
   order by sequencia ;

  
BEGIN 
  
  arquivo_saida := UTL_File.Fopen('C:\Arquivos',sysdate, 'w');   

                For Reg_Linha in Cur_linha Loop

 UTL_File.put_line(arquivo_saida, Reg_linha.SPED);

                End Loop; 
                
 UTL_File.Fclose(arquivo_saida);   
 Dbms_Output.Put_Line('Arquivo gerado com sucesso.');
 EXCEPTION
     WHEN UTL_FILE.INVALID_OPERATION THEN
Dbms_Output.Put_Line('Operação inválida no arquivo.'); 
 UTL_File.Fclose(arquivo_saida);
     WHEN UTL_FILE.WRITE_ERROR THEN
 Dbms_Output.Put_Line('Erro de gravação no arquivo.');
 utl_file.fclose(arquivo_saida);
   WHEN UTL_FILE.INVALID_PATH THEN

   Dbms_Output.Put_Line('Diretório inválido.');


UTL_File.Fclose(arquivo_saida);

END;
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante