Opa,
Em 19 de julho de 2010 10:00, Marcelo Florindo
<[email protected]>escreveu:
> Jota,
>
> Como assim uma função? Poderias explicar melhor?
>
Claro.
Segue um pequeno exemplo, talvez você precise fazer umas modificações e
corrigir a lógica, apenas tentei demonstrar a estrutura.
Não cheguei a testar.
CREATE OR REPLACE FUNCTION f_teste(codigo_orcamento INTEGER)
RETURNS BOOLEAN AS $$
DECLARE
linha RECORD;
BEGIN
PERFORM id_orcamento
FROM orcamento
WHERE id_orcamento=codigo_orcamento
AND is_baixa_produto='S';
IF FOUND THEN
RAISE NOTICE 'Orçamento já possue Status de Baixa';
RETURN FALSE;
END IF;
FOR linha IN SELECT id_produto,qtde_produto
FROM item_orcamento WHERE id_orcamento=codigo_orcamento LOOP
UPDATE product SET qtde_estoque=linha.qtde_produto
WHERE id_produto=linha.id_produto;
END LOOP;
UPDATE orcamento SET is_baixa_produto='S' WHERE
id_orcamento=codigo_orcamento;
RETURN TRUE;
END;
$$ LANGUAGE PLPGSQL;
>
> Grato,
>
> Marcelo
>
> Em 19 de julho de 2010 09:57, JotaComm <[email protected]> escreveu:
>
> Olá,
>>
>> Em 19 de julho de 2010 09:49, Marcelo Florindo <
>> [email protected]> escreveu:
>>
>> Mas este update atenderia um item e preciso que tenha um laço, pois são
>>> vários updates.
>>>
>>> Ou seja, é uma stored procedure que dá baixa em todos os itens de um
>>> determinado orçamento.
>>>
>>
>> Que tal em vez de um cursor, uma simples função que retorna TRUE ou FALSE?
>> Acho que seria mais indicado.
>>
>>>
>>> Att,
>>>
>>> Marcelo
>>>
>>> Em 19 de julho de 2010 09:44, Fabrízio de Royes Mello <
>>> [email protected]> escreveu:
>>>
>>>>
>>>>
>>>> Em 18 de julho de 2010 22:13, Marcelo Florindo <
>>>> [email protected]> escreveu:
>>>>
>>>>>
>>>>>
>>>>> <corte>
>>>>>
>>>>> open v_cursor for select id_produto,qtde_produto from item_orcamento
>>>>> where id_orcamento=codigo_orcamento;
>>>>>
>>>>> loop
>>>>>
>>>>> FETCH v_cursor INTO linha;
>>>>>
>>>>> update produto set qtde_estoque=linha.qtde_produto
>>>>> where id_produto=linha.id_produto;
>>>>>
>>>>> end loop;
>>>>> CLOSE v_cursor;
>>>>>
>>>>> <corte>
>>>>>
>>>>>
>>>>>
>>>> Caro Marcelo,
>>>>
>>>> Desconheço os requisitos do teu sistema e a sua estrutura, porém vc tem
>>>> certeza que precisa utilizar um cursor nesse caso?? Pq um simples update
>>>> resolveria o seu problema normalmente:
>>>>
>>>> UPDATE produto
>>>> SET qtde_estoque = item_orcamento.qtde_estoque
>>>> FROM item_orcamento
>>>> WHERE produto.id_produto = item_orcamento.id_produto
>>>> AND item_orcamento.id_orcamento = codigo_orcamento;
>>>>
>>>>
>>>> Cordialmente,
>>>>
>>>> --
>>>> Fabrízio de Royes Mello
>>>> >> Blog sobre TI: http://fabriziomello.blogspot.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
>>>
>>>
>>
>> []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
>
>
[]s
--
JotaComm
http://jotacomm.wordpress.com
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral