...
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