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