Perfeito Osvaldo, Resolvido.
Obrigado. Att, Elias. Em 21 de julho de 2010 13:13, Osvaldo Kussama <[email protected]>escreveu: > Em 21 de julho de 2010 11:58, .:eliastxt:. ... <[email protected]> > escreveu: > > Opa, valeu pela resposta. > > > > Na verdade eu não me expressei bem. > > > > Eu preciso da função porque tem calculos que serão feitos com ela. > > > > Eu tenho uma função hoje[1] que faz metade do que eu preciso. A minha > função > > recebe um id_material e grava na tabela de fechamento os calculos > referentes > > a esse material. > > > > O que eu preciso adaptar na função é fazer com que em apenas uma chamada > > todos seja feito o fechamento de todos os materiais da tabela material. > > > > Na verdade não sei se esse é o caminho correto para isso, mas, por > enquanto > > é a única idéia que eu tenho. > > > > > > Segue o modelo da função que eu preciso adaptar. > > > > --função fechamento > > > > declare > > material numeric(10); > > quantidade_total numeric; > > quantidade_entrada numeric; > > quantidade_saida numeric; > > valor_total numeric; > > valor_entrada numeric; > > valor_saida numeric; > > > > begin > > > > material=$1; > > quantidade_entrada := 0; > > quantidade_saida := 0; > > quantidade_total :=0; > > valor_entrada :=0; > > valor_saida :=0; > > valor_total :=0; > > > > quantidade_entrada := (select SUM(quantidade) from chamado.item where > > id_entrada is not null AND id_material = material); > > if (quantidade_entrada is null) then > > quantidade_entrada := 0; > > end if; > > > > quantidade_saida := (select SUM(quantidade) from chamado.item where > id_saida > > is not null AND id_material = material); > > if (quantidade_saida is null) then > > quantidade_saida := 0; > > end if; > > > > quantidade_total := (quantidade_entrada - quantidade_saida); > > > > valor_entrada:= (select SUM(valor) from chamado.item where id_entrada is > not > > null AND id_material = material); > > if (valor_entrada is null) then > > valor_entrada := 0; > > end if; > > > > valor_saida:= (select SUM(valor) from chamado.item where id_saida is not > > null AND id_material = material); > > if (valor_saida is null) then > > valor_saida := 0; > > end if; > > > > valor_total := (valor_entrada - valor_saida); > > > > insert into chamado.fechamento(id_fechamento, ano, mes, dt_hora, saldo, > > valor, id_usuario, id_material) values((select nextval > > ('chamado.fechamento_id_fechamento_seq')), 2010, 01, '2010-01-01 > > 00:00:00',quantidade_total, valor_total, 1, material); > > > > return material; > > > > end; > > > > Att, > > Elias > > > > > > Em 21 de julho de 2010 11:44, JotaComm <[email protected]> escreveu: > >> > >> Olá, > >> > >> Em 21 de julho de 2010 11:33, .:eliastxt:. ... <[email protected]> > >> escreveu: > >>> > >>> Bom dia pessoal, > >>> > >>> Estou criando um sistema de estoque e preciso criar uma function para > >>> inserir dados em uma tabela de fechamento. Para popular essa tabela eu > >>> precisarei dar um INSERT para cada id_material que eu vou buscar numa > tabela > >>> material. > >>> > >>> Creio que eu precisarei utilizar cursor para fazer isso. > >>> > >>> A idéia geral eu acho que seria assim: > >>> > >>> Criar função fechamento > >>> DECLARE material_cur CURSOR FOR SELECT id_material FROM material; > >>> BEGIN > >>> --Para cada linha do cursor > >>> INSERT INTO fechamento(id_material) VALUES (id_material do cursor); > >>> END > >>> > >>> Alguém saberia me dizer como implementar isso no PostgreSQL? > >> > >> Se entendi bem não precisa fazer uma função, a consulta abaixo resolve o > >> seu problema. > >> > >> INSERT INTO fechamento(id_material) SELECT id_material FROM material; > >> > >> > > > > Pode ser que eu não tenha entendido corretamente seu problema, mas > creio que poderia ser algo do tipo: > SELECT sua_função(id_material) FROM tab_material WHERE > alguma_restrição_para_os_materiais_que_deseja_atualizar; > utilizando a mesma função que você tem atualmente. > > Osvaldo > _______________________________________________ > 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
