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
  

Mensagemem Qua, 25 Set 2019 10:50 pm

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 --

Código: Selecionar todos
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 --

Código: Selecionar todos

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
tiago_pimenta
Localização: Barretos / SP

Mensagemem Qui, 26 Set 2019 1:10 pm

Aqui não apareceu o anexo. :-/
dr_gori
Localização: Portland, OR USA

Thomas F. G

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

Mensagemem Qui, 26 Set 2019 1:14 pm

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

https://lh3.googleusercontent.com/efHW3 ... 27-h124-no
tiago_pimenta
Localização: Barretos / SP

Mensagemem Qui, 26 Set 2019 5:54 pm

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: viewtopic.php?f=2&t=10806
* Verifique se a imagem aparece.

Se aparece, então o problema é aqui com minha conexão.
dr_gori
Localização: Portland, OR USA

Thomas F. G

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

Mensagemem Qui, 26 Set 2019 6:03 pm

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
tiago_pimenta
Localização: Barretos / SP

Mensagemem Qui, 26 Set 2019 6:09 pm

Agora aparece!
dr_gori
Localização: Portland, OR USA

Thomas F. G

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



Voltar para PL/SQL

Quem está online

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