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