[firebase-br] RES:RES: Passar nome do campo como parâmetro em Stored Procedure

Escovador de Bits escovadordebits em gmail.com
Seg Fev 9 17:09:45 -03 2009


Bom dia/tarde Marcio.

Teste o seguinte código:

EXECUTE STATEMENT 'UPDATE PRODUTOS SET ' || CAMPO_ENT || '=' || 
CAMPO_ENT || '-' || OQTDVAR || ' WHERE CODP=' || OCOD_VAR;

Espero ter ajudado mais que atrapalhado. :D

Marcio R. Fonseca escreveu:
> Daniel, 
> esta quase, a primeira parte da SP foi beleza, agora não consegui resolver o erro que esta dando nesta linha:
>
>         execute statement 'update PRODUTOS set ' || :CAMPO_ENT
>         ||'='||:CAMPO_ENT-:oqtd_var||' where codp='||:ocod_var;
>
> Dá o seguinte erro:
>
> Unsuccessful execution caused by a system error that precludes
> successful execution of subsequent statements.
> Dynamic SQL Error.
> expression evaluation not supported.
>
>
> Será que não posso aninhar dois comandos statement?
>
> Comento esta linha funciona.
>
>
>
>
> Olá Márcio!
>
> Utilize o Execute Statement.
>
> Acho que sua SP ficaria mais ou menos assim:
>
> begin
> for execute statement 'select o.CD_PRODUTO,o.OQTD,' || :CAMPO_ENT || 'from
> orcami o inner join PRODUTOS p on p.CD_PRODUTO=o.CD_PRODUTO where o.ONUM='
> || :ONUM_ENT 
> into :ocod_var,:oqtd_var,:esto_var 
> do
> begin
>      if (:OQTD_VAR>:ESTO_VAR) then
>         execute statement 'update PRODUTOS set ' || :CAMPO_ENT
>         ||'='||:CAMPO_ENT-:oqtd_var||' where codp='||:ocod_var;
>      else
>         OCOD_SAI=:ESTO_VAR;
>      suspend;
>    end
> end
>
>
> Acho que é isso. Só não testei :D.
>
> Sds,
>
> Daniel
>
>
>
>
> -----Mensagem original-----
> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
> nome de Marcio R. Fonseca
> Enviada em: domingo, 8 de fevereiro de 2009 23:24
> Para: lista em firebase.com.br
> Assunto: [firebase-br] Passar nome do campo como parâmetro em Stored
> Procedure
>
> Caros amigos, 
> tentei criar uma SP que recebesse como parametro o nome de um campo para
> atualizar
>
> begin
> for select o.CD_PRODUTO,o.OQTD,:CAMPO_ENT from orcami o inner join PRODUTOS
> p
> on p.CD_PRODUTO=o.CD_PRODUTO where o.ONUM=:ONUM_ENT into
> :ocod_var,:oqtd_var,:esto_var do
>    begin
>      if (:OQTD_VAR>:ESTO_VAR) then
>      update PRODUTOS set :CAMPO_ENT=:CAMPO_ENT-:oqtd_var where
> codp=:ocod_var;
>      else
>      OCOD_SAI=:ESTO_VAR;
>      suspend;
>    end
> end 
>
> Existe alguma maneira de se fazer isso?
> Grato
>  
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>  
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>   




Mais detalhes sobre a lista de discussão lista