Ivan Guimarães Meirelles escreveu: > Sebastian Selau Webber Colombo escreveu: >> jah que vc está começando com o pg, este artigo deve servir: >> http://www.imasters.com.br/artigo/2065/postgresql/stored_procedures/ >> >> > Obrigado Sebastian pela atenção... > > Muito legal esses artigos, porém não resolvem a minha dúvida. Tenho uma > tabela CAIXA com dados a seguir: > > *historico > * *entrada > * *saida > * > Venda de Pneus > 1.800,00 > 0,00 > Pagamento de Telefone > 0,00 > 328,00 > Aquisição de máquinas > 0,00 > 750,00 > > > Gostaria de escrever uma função que ao ser executada me retorne o > seguinte resultado: > > *historico > * *entrada > * *saida > * *saldo > * > Venda de Pneus > 1.800,00 > 0,00 > 1.800,00 > Pagamento de Telefone > 0,00 > 328,00 > 1.472,00 > Aquisição de Máquinas > 0,00 > 750,00 > 722,00 > > > Ou seja, a função executaria um select na tabela CAIXA e para cada linha > retornada me informar o saldo. > > Eu domino bem esse tipo de função (stored procedure) no firebird, mas > não achei nada que mostre o caminho de como manipular as linhas > retornadas de um select, uma-a-uma, no PostgreSQL. > Se alguém puder me passar alguma dica, ficarei muito grato. >
Se sua tabela possui uma chave primária que mantenha os registros na ordem que devm ser considerados, por ex. um campo SERIAL, você pode utilizar uma query do tipo: bdteste=# SELECT * FROM foo; id | historico | entrada | saida ----+-----------+---------+-------- 1 | xxx | 800.00 | 0.00 2 | xxxxx | 1000.00 | 0.00 3 | yyy | 0.00 | 328.00 4 | yyyyyy | 0.00 | 750.00 (4 registros) bdteste=# SELECT historico, entrada, saida, (SELECT sum(entrada)-sum(saida) FROM foo AS f WHERE f.id <= foo.id) as saldo FROM foo ORDER BY id; historico | entrada | saida | saldo -----------+---------+--------+--------- xxx | 800.00 | 0.00 | 800.00 xxxxx | 1000.00 | 0.00 | 1800.00 yyy | 0.00 | 328.00 | 1472.00 yyyyyy | 0.00 | 750.00 | 722.00 (4 registros) []s Osvaldo _______________________________________________ Grupo de Usuários do PostgreSQL no Brasil Antes de perguntar consulte o manual http://pgdocptbr.sourceforge.net/ Para editar suas opções ou sair da lista acesse a página da lista em: http://pgfoundry.org/mailman/listinfo/brasil-usuarios
