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
