2008/12/9 <[EMAIL PROTECTED]>

> Citando Lucas Paz <[EMAIL PROTECTED]>:
>
> > 2008/12/9 Celso <[EMAIL PROTECTED]>
> >
> >>  Olá Lucas, é exatamente isso. Vc cria um function que retorna um tipo
> >> Trigger.
> >> Abaixo um exemplo que tenho. O exemplo faz o seguinte:
> >> Se incluir um documento a pagar que o tipo de vencimento seja "A VISTA"
> ele
> >> já liquida o documento, inserindo um registro
> >> na tabela liquidacoes_contas_pagar. Tem um cursor pra pegar uns
> parâmetros
> >> e um teste antes. mas é mais ou menos o que vc quer.
> >>
> >>
> >> CREATE OR REPLACE FUNCTION TG_AI_CPA () RETURNS trigger AS
> >> $body$
> >> DECLARE
> >>    C1 CURSOR IS
> >>       SELECT FC_PARAMETRO(11, 'MCP_MOVIMENTO_AVISTA') AS MCP_MOVIMENTO,
> >>              FC_USUARIO() AS USR_USUARIO;
> >>    V1 RECORD;
> >> begin
> >>    OPEN C1;
> >>    FETCH C1 INTO V1;
> >>    CLOSE C1;
> >>    IF (NEW.TPV_TIPO = 2) AND (V1.MCP_MOVIMENTO IS NOT NULL) THEN
> >>       INSERT INTO LIQUIDACOES_CONTAS_PAGAR
> >>         (LCP_SEQUENCIA, CPA_SEQUENCIA, MCP_MOVIMENTO,
> >>          LCP_DATA_OCORRENCIA, LCP_DATA_CONTABIL, LCP_VALOR,
> >>          LCP_LANCAMENTO_MANUAL, USR_USUARIO, LCP_RETROATIVO)
> >>       VALUES (NEXTVAL('SQ_LIQUIDACOES_CONTAS_PAGAR'), NEW.CPA_SEQUENCIA,
> >> CAST(V1.MCP_MOVIMENTO AS NUMERIC),
> >>               NEW.CPA_VENCIMENTO, NEW.CPA_VENCIMENTO, NEW.CPA_VALOR,
> >>                'S', V1.USR_USUARIO, 'S');
> >>    END IF;
> >>    RETURN NEW;
> >> end;
> >> $body$
> >> LANGUAGE 'plpgsql';
> >>
> >> CREATE TRIGGER TG_AI_CPA AFTER INSERT
> >> ON contas_pagar FOR EACH ROW
> >> EXECUTE PROCEDURE TG_AI_CPA();
> >>
> >>
> >>
> >>
> >> ----- Original Message -----
> >> *From:* Lucas Paz <[EMAIL PROTECTED]>
> >> *To:* [email protected]
> >> *Sent:* Tuesday, December 09, 2008 10:52 AM
> >> *Subject:* [pgbr-geral] Trigger Postgresql vs Firebird
> >>
> >> Pessoal, estamos migrando para o Postgresql e estou com duvida de como
> >> fazer algumas trigger's visto que a estrutura do firebird é
> completamente
> >> diferente do Postgresql. No Firebird tenho isso por exemplo...
> >>
> >> CREATE TRIGGER ADD_HISTORICO_AI FOR LANCAMENTOS ACTIVEAFTER INSERT
> POSITION
> >>
> >> AS
> >> BEGIN
> >>    INSERT INTO HISTORICO_LANCAMENTO (ID_BANCO, ID_LANCAMENTO, ID_ESTADO,
> >> DATA)
> >>  VALUES (new.ID_BANCO, new.ID_LANCAMENTO, new.ID_ESTADO,
> new.DATA_ENTRADA);
> >> END;
> >>
> >> Essa trigger faz o seguinte, quando insiro uma linha na tabela
> lancamentos,
> >> ela automaticamente insere uma linha na tabela historico_lancamentos...
> i
> >> pelo que vi tenho que criar uma function e um tigger que dispara a
> >> function... se alguem puder me ajudar a fazer essa trigger no firebird
> pra
> >> eu entender como funciona eu agradeço, as outras são bem parecidas
> >> entendendo essa já fica certo.
> >>
> >> Obrigado pela atenção...
> >>
> >>
> >>
> >> --
> >> Lucas Paz
> >>
> >>  ------------------------------
> >>
> >> _______________________________________________
> >> pgbr-geral mailing list
> >> [email protected]
> >> 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
> >>
> >>
> >
> > Então Pessoal criei a function assim
> >
> >
> > CREATE OR REPLACE FUNCTION add_historico()
> >   RETURNS "trigger" AS
> > $BODY$begin
> >   INSERT INTO HISTORICO_LANCAMENTO (ID_BANCO, ID_LANCAMENTO, ID_ESTADO,
> > DATA)
> >  VALUES (new.ID_BANCO, new.ID_LANCAMENTO, new.ID_ESTADO,
> new.DATA_ENTRADA);
> >
> > end;$BODY$
> >   LANGUAGE 'plpgsql' VOLATILE;
> > ALTER FUNCTION add_historico() OWNER TO spcred;
> >
> > Criei o trigger  tudo ok... Só que na hora que vou inserir os dados na
> > tabela lancamentos aparece isso pra mim...
> >
> > Query failed: ERRO:  control reached end of trigger procedure without
> RETURN
> > CONTEXT:  PL/pgSQL function add_historico
> >
> >
> > pelo que entendi falta retornar alguma coisa? correto? Agradeceço a
> > atençao...
> >
> >
> >
> > --
> > Lucas Paz
> >
> >
>
> Adicione no final da sua funcao
> RETURN new;
>
> ---------------------------------------------------------------------
> Esta  mensagem  foi  enviada  atraves  do  WEB Mail.
>
>
>
> ----------------------------------------------------------------------------------
> Esta mensagem foi verificada pelo sistema de Anti-virus da SJB Solados.
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>



Obrigado pessoal, funcionou... só que coloquei return null pois a funcão é
after insert portanto não tem que retornar nada...

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

Responder a