Dúvida ao Juntar Registros

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
Avatar do usuário
tiago_pimenta
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 213
Registrado em: Qua, 29 Jun 2011 9:49 am
Localização: Barretos / SP

Pessoal, boa noite, tudo bem ?

Estou com um problema e gostaria de uma sugestão de vocês... Tenho uma tabela com alguns ceps e seus respectivos prazos, porém, preciso criar uma outra com a seguinte regra:

- Se o cep inicial do próximo registro, for igual o cep final + 1 da linha atual e os prazos forem iguais, preciso "juntar" esses dois registros, caso não seja, insere o registro normalmente.

Exemplo

-- Script do Exemplo das Tabelas --

Selecionar tudo

create table tabela_prazo (cep_inicio number(8) not null,
                           cep_fim number(8) not null,
                           prazo number(3) not null);

create table tabela_prazo_compactado (cep_inicio number(8) not null,
                                      cep_fim number(8) not null,
                                      prazo number(3) not null);

insert into tabela_prazo(cep_inicio, cep_fim, prazo) values(1000000, 1000005, 5);
insert into tabela_prazo(cep_inicio, cep_fim, prazo) values(510101, 510104, 4);
insert into tabela_prazo(cep_inicio, cep_fim, prazo) values(510000, 510067, 4);
insert into tabela_prazo(cep_inicio, cep_fim, prazo) values(510068, 510100, 3);
insert into tabela_prazo(cep_inicio, cep_fim, prazo) values(1000006, 10000010, 5);
insert into tabela_prazo(cep_inicio, cep_fim, prazo) values(810000, 810001, 5);
insert into tabela_prazo(cep_inicio, cep_fim, prazo) values(810002, 810003, 5);
insert into tabela_prazo(cep_inicio, cep_fim, prazo) values(810004, 810005, 5);
-- Bloco do Código --

Selecionar tudo


declare v_cep_inicio_anterior number(8);
        v_cep_fim_anterior number(8);
        v_prazo_anterior number(3);
        v_cep_inicio_atual number(8);
        v_cep_fim_atual number(8);
        v_prazo_atual number(3);


declare c_cep cursor for
select tp.cep_inicio,
       tp.cep_fim,
       tp.prazo
from treinamento_old.dbo.tabela_prazo as tp
order by tp.cep_inicio,
         tp.cep_fim,
         tp.prazo;


open c_cep;

fetch c_cep
into v_cep_inicio_anterior,
     v_cep_fim_anterior,
     v_prazo_anterior;

--loop
while fetch_status = 0
    begin
        fetch c_cep
        into v_cep_inicio_atual,
             v_cep_fim_atual,
             v_prazo_atual;

        if ((v_prazo_anterior = v_prazo_atual) and ((v_cep_fim_anterior + 1) = v_cep_inicio_atual))
            begin

                update treinamento_old.dbo.tabela_prazo_compactado
				set cep_fim = v_cep_fim_atual
				where cep_inicio = v_cep_inicio_anterior

            end;
        else
            begin

                insert into treinamento_old.dbo.tabela_prazo_compactado(cep_inicio, cep_fim, prazo)
				select v_cep_inicio_atual, v_cep_fim_atual, v_prazo_atual;

            end;

    set v_cep_inicio_anterior = v_cep_inicio_atual
	set v_cep_fim_anterior = v_cep_fim_atual
	set v_prazo_anterior = v_prazo_atual
	
	--exit when c_cep%notfound; 

    end;
--end loop

close c_cep;
deallocate c_cep;


select *
from tabela_prazo_compactado as tpc
order by tpc.cep_inicio,
         tpc.cep_fim,
         tpc.prazo;

O resultado da tabela_prazo_compactado deverá ser:

Imagem
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Aqui não apareceu o anexo. :-/
Avatar do usuário
tiago_pimenta
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 213
Registrado em: Qua, 29 Jun 2011 9:49 am
Localização: Barretos / SP

Uai... Para mim está aparecendo... Tenta acessar esse link dr_gori

https://lh3.googleusercontent.com/efHW3 ... 27-h124-no
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Estranho, não está aparecendo aqui.
Faça o seguinte teste:
* No Chrome, pressione CTRL SHIFT N
* Vai abrir uma janela incógnito.
* Clique nesse link: http://glufke.net/oracle/viewtopic.php?f=2&t=10806
* Verifique se a imagem aparece.

Se aparece, então o problema é aqui com minha conexão.
Avatar do usuário
tiago_pimenta
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 213
Registrado em: Qua, 29 Jun 2011 9:49 am
Localização: Barretos / SP

Fazendo o teste que você pediu, realmente não aparece... Mas eu fiz exatamente o teste da aba anonima do Chrome com o link que eu ti passei... Enfim... Vou upar novamente a imagem em outro lugar

Veja se agora aparece para ti

Imagem
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Agora aparece!
Responder
  • Informação
  • Quem está online

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