Nao desejo receber mensagens
Em 04/04/2013 11:19, "Flavio Henrique Araque Gurgel" <[email protected]>
escreveu:
>
> Em 04-04-2013 09:52, Irineu escreveu:
>
>> 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;
>>
>
> Talvez você esteja com uma questão de concorrência. Verifique se o erro
> realmente aconteceu na tabela ind_03_03_02_02_a1 e certifique-se disso.
>
> Pergunto: ao inserir, de onde você retira o valor id_movimento (que me
> parece ser a sua PK ou pelo menos índice único)?
>
> Eu faria um teste, colocando dentro do IF que testa a existência um:
> RAISE EXCEPTION
> Pra logar o que realmente está acontecendo.
> Você pode colocar RAISE EXCEPTION ou RAISE NOTICE em vários pontos da sua
> função pra tentar "debugar".
>
> O que pode haver é uma transação concorrente comitar o valor antes da sua
> função terminar, porém após o teste. Isso é possível em caso de isolamento
> READ COMMITTED.
>
> []s
>
> ______________________________**____
> Flavio Henrique A. Gurgel
> Líder de Projetos Especiais
> Consultoria, Projetos & Treinamentos 4LINUX
> Tel1: +55-11.2125-4747 ou 2125-4748
> www.4linux.com.br
> email: [email protected]
> ______________________________
> FREE SOFTWARE SOLUTIONS
> ______________________________**_________________
> pgbr-geral mailing list
> [email protected].**org.br<[email protected]>
> https://listas.postgresql.org.**br/cgi-bin/mailman/listinfo/**pgbr-geral<https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral>
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral