[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