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

Responder a