...
   IF EXISTS(SELECT a.id FROM senda.ind_03_03_02_02_a1 a WHERE
a.id_movimento = NEW.id_movimento) THEN
     RETURN NULL;
    END IF; ...

Continou a disparar a contraint.

Poderia passar toda a sua função?
Provavelmente você deveria colocar o código de INSERT após um ELSE, mas como tem um END IF aí não dá pra saber o que o resto de sua função faz.

Salve Flávio,

A trigger segue abaixo, na verdade ela está na própria tabela(ind_03_03_02_02_a1) do INSERT.

Abraço.


REATE OR REPLACE FUNCTION senda.movimentos_baixa()
  RETURNS trigger AS
$BODY$
DECLARE
vGravarFabrica BOOLEAN DEFAULT EXISTS(SELECT valor FROM senda.ind_03_03_01_01 WHERE parametro = 'informa_fabrica_baixa' AND valor = 'sim');
  BEGIN

   IF TG_RELNAME = 'ind_03_03_02_02_a1' THEN

IF EXISTS(SELECT a.id FROM senda.ind_03_03_02_02_a1 a WHERE a.id_movimento = NEW.id_movimento) THEN
     RETURN NULL;
    END IF;

NEW.remessa := (SELECT remessa FROM senda.ind_03_03_02_02 WHERE id = NEW.id_movimento); NEW.cod_op := (SELECT cod_op FROM senda.ind_03_03_02_02 WHERE id = NEW.id_movimento); IF (NEW.cod_celula IS NOT NULL) AND EXISTS(SELECT cod_segmento FROM senda.cad_01_02 WHERE cod_segmento = 2) THEN NEW.cod_turno:= (SELECT a.codigo FROM senda.ind_03_01_06 a WHERE a.desabil <> 'T' AND CASE WHEN a.hora_inicial < a.hora_final THEN (a.hora_inicial <= CURRENT_TIME AND a.hora_final >= CURRENT_TIME) ELSE ((CURRENT_TIME BETWEEN a.hora_inicial AND CAST('23:59' AS TIME) AND a.hora_inicial <= CURRENT_TIME) OR (CURRENT_TIME BETWEEN CAST('00:00' AS TIME) AND a.hora_final AND a.hora_final >= CURRENT_TIME))
                           END LIMIT 1);
    END IF;

   ELSEIF TG_RELNAME = 'ind_03_03_02_02_a2' THEN
NEW.remessa := (SELECT remessa FROM senda.ind_03_03_02_02 WHERE id = NEW.id_mov); NEW.cod_op := (SELECT cod_op FROM senda.ind_03_03_02_02 WHERE id = NEW.id_mov);
   END IF;

  IF vGravarFabrica THEN
NEW.cod_fabrica:=COALESCE(NEW.cod_fabrica,(SELECT a.cod_fabrica FROM senda.ind_03_03_01_03 a WHERE a.codigo = NEW.remessa));
  ELSE
NEW.cod_fabrica:=(SELECT a.cod_fabrica FROM senda.ind_03_03_01_03 a WHERE a.codigo = NEW.remessa);
  END IF;

  RETURN NEW;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE;



--
Irineu Raymundo
Programador/Consultor Técnico
Senda Engenharia de Dados Ltda.

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a