[firebase-br] RES: Erro Trigger Insert Or Update - Firebird 2.1

Ivan Guimarães Meirelles igmeirelles em gmail.com
Ter Ago 3 11:56:10 -03 2010


Olá Eduardo...

Experimente trocar AND por OR:

	IF (OLD.CPF <> NEW.CPF OR OLD.MATRICULA <> NEW.MATRICULA) THEN

Usando AND a condição somente será verdadeira se CPF e MATRICULA forem
modificados ao mesmo tempo. 
Se o usuário modificar somente CPF ou somente MATRICULA, não seria feita a
verificação.

Espero ter ajudado.
Um abraço.

-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Eduardo Belo
Enviada em: terça-feira, 3 de agosto de 2010 10:17
Para: FireBase
Assunto: [firebase-br] Erro Trigger Insert Or Update - Firebird 2.1

Olá Pessoal!

O objetivo da Trigger abaixo é evitar CPF e MATRICULA em duplicidade, só
pode aceitar CPF com Matriculas distintas, exemplo:

CPF: 111.111.111-11 - MATRICULA: 123456
CPF: 111.111.111-11 - MATRICULA: 999999

No Insert está Ok, mas no Update está passando. O que há de errado nesse
código?

CREATE OR ALTER TRIGGER TRG_CPF_MATRICULA_JA_EXISTE FOR USUARIOS ACTIVE
BEFORE INSERT OR UPDATE POSITION 0 AS BEGIN  IF (INSERTING) THEN
   IF (EXISTS
        (SELECT USUARIOS.CPF,USUARIOS.MATRICULA FROM USUARIOS
        WHERE USUARIOS.CPF=NEW.CPF AND USUARIOS.MATRICULA=NEW.MATRICULA))
THEN
         EXCEPTION CPF_MATRICULA_JA_EXISTE;  IF (UPDATING) THEN
    IF (OLD.CPF<>NEW.CPF AND OLD.MATRICULA<>NEW.MATRICULA) THEN
     IF (EXISTS
        (SELECT USUARIOS.CPF,USUARIOS.MATRICULA FROM USUARIOS
        WHERE USUARIOS.CPF=NEW.CPF AND USUARIOS.MATRICULA=NEW.MATRICULA))
THEN
         EXCEPTION CPF_MATRICULA_JA_EXISTE; END

Obrigado a todos que ajudarem.
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br Para
saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista