[firebase-br] RES: utilização de CASE dentro de uma procedure

Cassios cassio.hc em gmail.com
Sex Out 30 09:43:33 -03 2009


Dae Caras.
Consegui resolver criando duas variaveis para moedas e atribuindo a 
moeda respectivamente...

DECLARE VARIABLE Reais VARCHAR(2);
DECLARE VARIABLE Dolar VARCHAR(3);

BEGIN
Reais = 'R$';
Dolar = 'US$';

no case usei assim:

  CASE
      WHEN Moeda = 0 THEN
           ''' || :Reais || '''
      ELSE
           ''' || :Dolar || '''
  END MOEDA_CHAR,

vlw pelas dicas.

abraço a todos.


Cassios escreveu:
> Na verdade estou com dois problemas:
> 
> 1 - não consigo compilar a procedure se usar um campo assim:   
>     'R$' as campo
>     somente se for assim: "R$"
> porem se for com aspas, não roda a SP. dá este erro quando faço um 
> select nela.:
> 
>     SQL Error:  Dynamic SQL Error SQL error code = -206 Column     
> unknown RAS At line 3, column 63. Error Code: -206. Column does not 
> belong to referenced table
> 
> 
> 2 - o outro problema é do case.. não compila também. acho que se 
> resolver o 1 o primeiro se resolve.
> 
> vlw pelas dicas desde já.
> 
> 
> 
> 
> Cassios escreveu:
>> É que o campo moeda é um integer da tabela...
>> continua sem funcionar... :S
>>
>> agradeço as dicas. vlw
>>
>> Jose Aparecido da Silva escreveu:
>>> Posso estar escrevendo besteira, me desculpem e ignorem:
>>>
>>> Mas a sintaxe não é:
>>>
>>> For select ID, case Moeda when 0 then  'R$' else 'US$' end from 
>>> minha_tabela
>>> into :id, :moeda do suspend;
>>>
>>> Não é necessário usar o cast. É só definir a variável moeda como 
>>> varchar(3);
>>>
>>> [ ]'s
>>> Jose Aparecido da Silva
>>>
>>> -----Mensagem original-----
>>> De: lista-bounces em firebase.com.br 
>>> [mailto:lista-bounces em firebase.com.br] Em
>>> nome de Cassios
>>> Enviada em: quinta-feira, 29 de outubro de 2009 18:19
>>> Para: lista em firebase.com.br
>>> Assunto: Re: [firebase-br] utilização de CASE dentro de uma procedure
>>>
>>> opa.
>>> ACHEI que tivesse resolvido. mas NÃO.
>>>
>>> não sei porque mas o firebird não deixa eu criar a procedure se a 
>>> moeda estiver com (') apóstrofe. só com ("") aspas. Só que com aspas 
>>> a SP retorna erro.
>>>
>>> alguem pode me dar uma dica?
>>>
>>>
>>> For select case
>>>     when Moeda = 0 then
>>>         Cast('R$'  as varchar(3)) --assim não rola tenho que colocar
>>> apas aqui
>>>     else
>>>         Cast('US$' as varchar(3))
>>>     end
>>>         From minha_tabela
>>>         INTO :ID, :MOEDA
>>>     DO
>>>     BEGIN
>>>         SUSPEND;
>>> END
>>>
>>>
>>> vlw.
>>>
>>> Cassios escreveu:
>>>> Resolvi vlw.
>>>> o campo moeda é do tipo integer.. então na proceduro converti ele 
>>>> para varchar e funcionou.
>>>>
>>>>
>>>> vlw!!!
>>>>
>>>>
>>>> Cassios escreveu:
>>>>> opa.
>>>>> tentei mas retorna o mesmo erro.
>>>>>
>>>>> SQL Error:  Dynamic SQL Error SQL error code = -104 Token unknown - 
>>>>> line 37, column 24 R$. Error Code: -104. Invalid token The SQL: 
>>>>> ALTER PROCEDURE PR_minha
>>>>>
>>>>> não to entendo porque deveria funcionar... putz sei que é um detalhe..
>>>>>
>>>>> vlw.
>>>>>
>>>>>
>>>>> Moacir - GMail escreveu:
>>>>>> Ops,
>>>>>>
>>>>>> Não vi que retornava tb o ID.
>>>>>>
>>>>>> Mas o cast deve resolver.
>>>>>>
>>>>>> Moacir
>>>>>>
>>>>>>
>>>>>> Moacir - GMail escreveu:
>>>>>>> Cassios,
>>>>>>>
>>>>>>> Tire o campo id e faça um cast  que deverá resolver teu problema:
>>>>>>>
>>>>>>> For select case
>>>>>>>              when Moeda = 0 then
>>>>>>>                  Cast('R$'  as varchar(3))
>>>>>>>              else
>>>>>>>                  Cast('US$' as varchar(3))
>>>>>>>            end
>>>>>>>    From minha_tabela
>>>>>>>
>>>>>>>    INTO :ID, :MOEDA
>>>>>>>    DO
>>>>>>>      BEGIN
>>>>>>>    SUSPEND;
>>>>>>>      END
>>>>>>>
>>>>>>>
>>>>>>> Não esqueça que este cast deve coincidir com o tipo do parametro 
>>>>>>> de retorno MOEDA.
>>>>>>>
>>>>>>> Sucesso !!
>>>>>>>
>>>>>>> Moacir
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Cassios escreveu:
>>>>>>>> Opa.
>>>>>>>> To tentando fazer um case dentro de um  For execute statement
>>>>>>>>
>>>>>>>> faço assim:
>>>>>>>>
>>>>>>>> For execute statement '
>>>>>>>>     select id,
>>>>>>>>            case
>>>>>>>>               when Moeda = 0 then
>>>>>>>>                   'R$'
>>>>>>>>               else
>>>>>>>>                   'US$' end as Moeda2
>>>>>>>>     From minha_tabela
>>>>>>>>
>>>>>>>>     INTO :ID, :MOEDA
>>>>>>>>
>>>>>>>>     DO
>>>>>>>>       BEGIN
>>>>>>>>     SUSPEND;
>>>>>>>>       END
>>>>>>>>
>>>>>>>>
>>>>>>>>  se faço isso numa query normal, funciona, dentro do escopo da 
>>>>>>>> procedure não. Alguma dica?
>>>>>>>>
>>>>>>>> vlw.
>>>>>>>>
>>>>>>>>
>>>>>>>> ______________________________________________
>>>>>>>> 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
>>>>>>>
>>>>>> ______________________________________________
>>>>>> 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
>>>>>
>>>>
>>>> ______________________________________________
>>>> 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
>>>
>>>
>>> ______________________________________________
>>> 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
>>
> 
> 
> ______________________________________________
> 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