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