Prezado amigos...
Criei uma Trigger em uma determinada tabela para que o campo cpf não seja cadastrado Duas vezes (A não ser em branco)...
Ela funciona normalmento no update e no insert, mas no update só funciona se eu colocar no where a primary key da tabela...
Quando eu tento atualizar a tabela geral (sem where), a query trava !
Alguém tem alguma idéia...
o campo cpf é varchar(11) indexado ...

A Trigger :

 candidato_cpf_up BEFORE UPDATE ON public.candidato FOR EACH ROW EXECUTE PROCEDURE public.const_cpf_update();

A Funcao :

DECLARE
    ncpf varchar;
    id_cand integer;
    res RECORD;
BEGIN
IF NEW.cpf != OLD.cpf THEN
    ncpf:=NEW.cpf;
    id_cand:= OLD.id_candidato;
    IF ncpf != '' AND  NOT ncpf  IS NULL  THEN
       SELECT INTO res  COUNT(cpf) as num_cpf FROM candidato WHERE cpf = ncpf AND id_candidato != id_cand;
       IF res.num_cpf > 0 THEN
          RAISE EXCEPTION 'CPF ja cadastrado %',ncpf;
       ELSE
          RETURN NEW;
       END IF;
    ELSE
        RETURN NEW;
    END IF;
ELSE
    RETURN NEW;
END IF;
END;


Bom é isso ai !!

Vlw Lista...

Thiago Risso
Web Developer
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
http://www.postgresql.org.br

Responder a