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
> 0
> 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
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a