Select count(*)
from ceps
where numero_ini between cepinicial and cepfinal or
          numero_fim between cepinicial and cepfinal

Se houver retorno é porque numero_ini ou numero_fim já está dentro de uma
determinada faixa.

[]´s


Em 22 de julho de 2013 08:29, Douglas Fabiano Specht <
douglasfabi...@gmail.com> escreveu:

>
>
>
> Em 20 de julho de 2013 20:30, Danilo Silva 
> <danilo.dsg.go...@gmail.com>escreveu:
>
>> Pessoal,
>>
>> Tenho uma tabela de cadastro de faixas de ceps
>> (cliente,cepinicial,cepfinal), onde não é permitido duplicidade de faixas
>> para o mesmo cliente e que uma faixa fique dentro de outra, exemplo:
>>
>> Correto
>> codigo | cliente | cepinicial | cepfinal
>> --------+---------+------------+----------
>>       1 |       1 | 01000000   | 01599999
>>       2 |       1 | 02000000   | 02999999
>>       3 |       1 | 03000000   | 04999999
>> (3 rows)
>>
>>
>> Errado
>> codigo | cliente | cepinicial | cepfinal
>> --------+---------+------------+----------
>>       1 |       1 | 01000000   | 01599999
>>       2 |       1 | 02000000   | 02999999
>>       3 |       1 | 02500000   | 04999999
>> (3 rows)
>>
>>
>> Errado pois o cep 02500000 já existe dentro da faixa anterior. Atualmente
>> eu bloqueio o insert na aplicação e criei uma regra com *DO INSTEAD
>> NOTHING* para evitar a duplicidade. Qual a melhor forma de evitar esses
>> tipos de duplicidade, ou está certo da forma que está?
>>
>> []s
>> Danilo
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> pgbr-geral@listas.postgresql.org.br
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
> Bom dia Danilo,
> eu fiz através de uma trigger mais ou menos parecido, a diferença foi que
> eu tinha uma data e nao poderia estar m um intervalo ja existente.
>
>  create or replace function not_permit_double () returns trigger as
> $tg_not_permit_double$
>     begin
> if (new.numero>0) and (new.tipoacesso ='R') and (exists(SELECT 1 FROM
> dah.reserva res WHERE new.numero = res.numero
>  AND ((new.datain>=res.datain and new.datain <res.dataout) or
> (new.dataout>res.datain and new.dataout<=res.dataout) or
>      (new.datain<=res.datain and new.datain <res.dataout and
> new.dataout>res.datain) or
>      (new.datain<=res.datain and new.datain <res.dataout and
> new.dataout>=res.dataout) ))) then
>         raise EXCEPTION 'Numero ja existente!!!';
>
> END IF;
>     RETURN new;
>     end;
> $tg_not_permit_double$ LANGUAGE plpgsql;
>
>  create trigger tg_not_permit_double before insert on dah.reserva
>   for each row execute procedure not_permit_double();
>
>
>
> --
>
> Douglas Fabiano Specht
>
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>


-- 
Mello Júnior
41.3252-3555
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Reply via email to