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

Responder a