Gerar arquivo texto em branco a partir do resultado de um cu

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
Tinho
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 318
Registrado em: Seg, 16 Nov 2009 4:50 pm
Localização: São Paulo - SP

Selecionar tudo


/* 
   Senhores, tenho uma "deficiência" de não conhecer todos os recursos do 
   PL e também de SQL mas me esforço o máximo para a cada dia ir aprendendo 
   mais e me superar, por isso antes de postar aqui sempre tento achar uma 
   solução por conta própria.

   Bem eu  preciso de uma ajuda para conseguir a entender a estrutra do PL/SQL 
   e seus recursos e como posso utilzá-los para resolver alguns problemas. 
 
   O caso é o seguinte, possuo uma lista de redes e preciso gerar arquivos 
   textos para as mesmas conforme for sendo encontrado referencias delas em 
   outra tabela a qual essas redes se relacionam. Esta segunda tabela, contem 
   as movimentações de compras efetuadas pelas redes da lista. Até então, tudo
   bem faço o relacionamento procurando as ocorrencias na tabela armazeno em um 
   cursor e através do conteudo do cursor gero os arquivos necessários separando-os
   por cada rede. 
   
   O problema é que quando não existem movimentações para determinada rede o 
   cursor não é preenchido e simplesmente não gera o arquivo, até então acre-
   dito que este seja um comportamento "normal", a questão é que se perde em 
   partes o controle físico dos arquivos que não são gerados para o arquivamen-
   to exigido pelo cliente, que quer que seja enviado o arquivo em branco com-
   provando que não houveram movimentações.
   
   Cogitei várias soluções, dentre elas verificar se o cursor está vazio e gerar
   um arquivo qualquer sem conteúdo, já que não é exigido nenhum cabeçalho o qual-
   quer outro detalhamento, o incoveniente neste caso é que como são várias redes,
   qual saber a que não houve movimentação em determinado período? 
   
   Pensei também em criar um cursor apenas para pegar as redes que não tiveram 
   movimentação, fazendo uma comparação de uma lista fixa (exemplo, as redes exis-
   tentes são A, B, C, D, E, as que tiveram movimentação foram B, D, E) com as lis-
   ta das redes retornadas onde foram encotradas movimentações. 
   
   É aí que entra a minha "limitação" técnica, criar o cursor tudo bem, mas como 
   vou fazer para comparar o conteúdo de duas queries, pegar apenas o resultado 
   da diferença entre ambas e gerar os arquivos? Sei que posso utlizar o UNION 
   ou MINUS para pegar a diferença, mas devo armazenar o resultado em alguma es-
   pecie de matriz, ou numa VIEW, tabela temporária?! 
    
   Grato a quem puder ajudar.
    
*/

At.
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Pelo que entendi, se resolveria o problema usando "outer join", mais comumente o Left Join.

Tipo:

Selecionar tudo

select r.cod_rede, r.col1, r.col2, etc
  from rede r
  left join movim m on m.cod_red = r.cod_rede
 where etc etc...
Se quiser algo mais preciso, precisaríamos que você postasse as colunas das tabelas e alguns dados de exemplo para elas, junto com a saída que você espera obter.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 9 visitantes