Bloquear Insert / Update na Trigger
Pessoal,
Tenho uma tabela onde vou gravando o telefone do cliente tenho dois campos para isso:
O que acontece é que nao posso ter o mesmo telefone cadastrado duas vezes no sistema, nao posso permitir de maneira nenhuma a duplicidade:
Entao gostaria de saber se é possivel fazer este bloqueio usando os recursos do Firebird.
Por exemplo fazendo um Trigger que no momento em que o usuario for cadastrar o novo telefone a Trigger verificar se o mesmo ja foi cadastrado na tabela .. caso sim executar uma Exception caso contrario o usuario grava o registro sem problema.
Agora caso seja possivel fazer atravez do firebird tenho que tomar o cuidado pois a Trigger tem que ferificar sempre no Insert e no Update tambem pois o usuario pode tentar alterar um telefone que ja esteja cadastrado por um novo que ja esteja cadastrado tambem só que em outro cliente.
Estou usando o Firebird 1.5
Se alguem puder ajudar.
Tenho uma tabela onde vou gravando o telefone do cliente tenho dois campos para isso:
TELEFONE VARCHAR(9), DDD CHAR(2),
O que acontece é que nao posso ter o mesmo telefone cadastrado duas vezes no sistema, nao posso permitir de maneira nenhuma a duplicidade:
Entao gostaria de saber se é possivel fazer este bloqueio usando os recursos do Firebird.
Por exemplo fazendo um Trigger que no momento em que o usuario for cadastrar o novo telefone a Trigger verificar se o mesmo ja foi cadastrado na tabela .. caso sim executar uma Exception caso contrario o usuario grava o registro sem problema.
Agora caso seja possivel fazer atravez do firebird tenho que tomar o cuidado pois a Trigger tem que ferificar sempre no Insert e no Update tambem pois o usuario pode tentar alterar um telefone que ja esteja cadastrado por um novo que ja esteja cadastrado tambem só que em outro cliente.
Estou usando o Firebird 1.5
Se alguem puder ajudar.
Mmoreira
Curtidas 0
Respostas
Emerson Nascimento
20/12/2006
crie um índice único pelos campos telefone + ddd
GOSTEI 0
Mmoreira
20/12/2006
Emerson,
Realmente fazendo como voce disse eu resolvi o problema, nao tenho mais que me preocupar com telefones repetidos.
Agora só uma duvida para conhecer um pouco mais os recursos do Firebird. Antes de ver a resposta aqui do post eu tinha feito estas Triggers que tambem impedem que seja gravado numero de telefones repetidos:
Inserir:
Atualizar:
Estava testando estas duas Trigger e o que acontece é que quando o tento cadastrar um numero de telefone ja existente a mensagem da exception nao é exibida.
* O que eu devo fazer para exibir a mensagem da exception?
Realmente fazendo como voce disse eu resolvi o problema, nao tenho mais que me preocupar com telefones repetidos.
Agora só uma duvida para conhecer um pouco mais os recursos do Firebird. Antes de ver a resposta aqui do post eu tinha feito estas Triggers que tambem impedem que seja gravado numero de telefones repetidos:
Inserir:
CREATE TRIGGER TELEFONE_VALIDA_INSERE FOR CONTATO ACTIVE BEFORE INSERT POSITION 0 AS begin if ( EXISTS( select ID_CONTATO from CONTATO where (TELEFONE = NEW.TELEFONE) and (DDD = NEW.DDD) and (DDI = NEW.DDI) ) ) then exception telefone_existe; end
Atualizar:
CREATE TRIGGER TELEFONE_VALIDA_ATUALIZA FOR CONTATO ACTIVE BEFORE UPDATE POSITION 0 AS begin if ((new.DDI <> old.DDI) or (new.DDD <> old.DDD) or (new.TELEFONE <> old.TELEFONE)) then begin if ( EXISTS( select ID_CONTATO from CONTATO where (TELEFONE = NEW.TELEFONE) and (DDD = NEW.DDD) and (DDI = new.DDI) and (ID_CONTATO <> old.ID_CONTATO) ) ) then exception telefone_existe; end end
Estava testando estas duas Trigger e o que acontece é que quando o tento cadastrar um numero de telefone ja existente a mensagem da exception nao é exibida.
* O que eu devo fazer para exibir a mensagem da exception?
GOSTEI 0