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;
>
>
>
>> Obrigado
>> Elias.
>>
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> [email protected]
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
> []s
> --
> JotaComm
> http://jotacomm.wordpress.com
>
> _______________________________________________
> 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