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