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 <
[email protected]> escreveu:
>
>
>
> Em 20 de julho de 2013 20:30, Danilo Silva
> <[email protected]>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
>> [email protected]
>> 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
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
--
Mello Júnior
41.3252-3555
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral