Não precisa, pode ser dentro da função e dentro dessa função você pode chamar outras funções.

Usamos isso direto no nosso ERP

Exemplo:

CREATE OR REPLACE FUNCTION fnc.ajustecusto()
  RETURNS void AS
$BODY$
DECLARE
    rNotafiscalentrada_item RECORD;
    rNfei                   RECORD;
BEGIN
FOR rNotafiscalentrada_item IN SELECT * FROM notafiscalentrada_item ORDER BY pknotafiscalentrada_item
    LOOP
SELECT INTO rNfei (fnc.notafiscalentrada_item_calcular(rNotafiscalentrada_item.fknotafiscalentrada,rNotafiscalentrada_item.pknotafiscalentrada_item)).*;
        UPDATE notafiscalentrada_item SET
        valorunitariocusto = COALESCE(rNfei.valorunitariocusto,0),
        demonstrativocalculocusto = rNfei.demonstrativocalculocusto
WHERE pknotafiscalentrada_item = rNotafiscalentrada_item.pknotafiscalentrada_item;
    END LOOP;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
ALTER FUNCTION fnc.ajustecusto() OWNER TO postgres;


Se for de interesse dá uma olhada nesse link, tem vários exemplos semelhantes

http://pgbr.postgresql.org.br/2009/palestras/aud2/ERP.pdf
http://www.4linux.com.br/noticias/2010/PostgreSQL/PGCon2009


Abraço,
Fabiano Machado Dias



Em 17/3/2011 15:16, izana souza torres escreveu:
Blz..então cada função seria uma transação ?? só q dentro da função que estou trabalhando não posso utilizar os comando COMMIT ou ROLLBACK explicitamente..



Logo o q estou entendo pelo o q os nobre colegas estão dizendo é o seguinte..


Imagine um código Java = E nele que vou trantar o COMMIT E ROLLBACKP falando grosseirament


exemplo;

try {

stmt.execute(select fecharCaixa()); // aqui ele chama a função fechar caixa
conn.commit()  // aqui ele comita caso tudo ok

}catch(Exception e){
  conn.rollback() // caso algum problema na hora de feixar o caixa
}


OU seja o que vcs estão tentando me dizer é que é em nivel de aplicação que eu vou utilizar o Comando commit e rollback
por exemplo..


Em 17 de março de 2011 12:48, Rogério Bassete <roge...@microwork.inf.br <mailto:roge...@microwork.inf.br>> escreveu:


    >Sim,
    >Como você falou, elas podem fazer para de uma transação quando
    chamada
    >dentro de uma.
    >Mas teria como vc me dar um exemplo prático ?

    Izana,

    begin;
    insert into foo values ('teste','teste2');
    update foo set campo1 = 'teste3' where id = 3;
    -- chama a sua função.
    select funcao_baixa_estoque();
    select funcao_gera_log();
    commit;

    Rogério Bassete

    _______________________________________________
    pgbr-geral mailing list
    pgbr-geral@listas.postgresql.org.br
    <mailto:pgbr-geral@listas.postgresql.org.br>
    https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Reply via email to