[firebase-br] Assunto: Re: Como funcionar esse "Execute statement"
luapfirebird em yahoo.com.br
luapfirebird em yahoo.com.br
Qui Jul 5 16:19:29 -03 2018
O colega teria alguma ideia de como resolver ?
Se eu executar fora do execute stamentFunciona perfeitamente esse IIF
Enviado do Yahoo Mail no Android
Em qui, 5 5e jul 5e 2018 às 12:26, Gladiston Santana&It;gladiston em vidy.com.br> escreveu: Creio que haja uma confusão, seu IIF tem valor varchar e int, o firebird permite concatena-los sem problemas, mas imagino que a operação de > seja um obstaculo para você misturá-los.
Em 3 de julho de 2018 15:07, luapfirebird em yahoo.com.br <luapfirebird em yahoo.com.br> escreveu:
Usando apenas uma variavel também não funciona é algo muito extranho que está acontecendo.
Veja :
Execute Block Returns ( Cod_Produto Varchar(35), Preco_Venda type of "Valores")As Declare variable vNomePreco VarChar(80);declare variable Str VarChar(1024) = '';Begin vNomePreco = 'Preco_Venda_1';
str = 'Select Distinct CP.Cod_Produto, ' || IIF(:vNomePreco > 0, :vNomePreco, 1) || ' From Cadastro_Precos CP Where CP.COD_PRODUTO = ''1'' ';
Execute statement :str Into :Cod_Produto, :Preco_Venda; Suspend;
End
Se eu trocar essa linha
str = 'Select Distinct CP.Cod_Produto, ' || IIF(:vNomePreco > 0, :vNomePreco, 1)
por isso
str = 'Select Distinct CP.Cod_Produto, ' || :vNomePreco
Ai funciona sem problemas
Em terça-feira, 3 de julho de 2018 13:11:04 BRT, Gladiston Santana <gladiston em vidy.com.br> escreveu:
seria mais produtivo você concentrar sua sintaxe inteira numa variavel só, veja esse exemplo:create or alter procedure get_cep ( p_cep varchar (8) = '')returns ( cep char (8), logradouro varchar (125), bairro varchar (70), cidade varchar (70), uf char (2), last_update timestamp)asdeclare variable st varchar (1024)='';
begin cep=''; logradouro=''; bairro=''; cidade=''; uf=''; last_update='01.01.1970';
st='select cep, logradouro, bairro, cidade, uf, last_update from ceps '; if (:p_cep<>'') then begin if ((char_length(:p_cep)<8) and (position ('%' in :p_cep)=0)) then p_cep=:p_cep||'%'; if (position ('%' in :p_cep)=0) then st=:st||'where cep like '''||:p_cep||''''; else st=:st||'where cep='''||:p_cep||''''; end for execute statement :st into :cep, :logradouro, :bairro, :cidade, :uf, :last_update do
begin suspend; end
end
E muito cuidado com aspas dentro de aspas, aspas duplas e simples misturadas podem não produzir o resultado desejado, alguns bancos interpretam aspas duplas como literal ou case sensitive.Também é permitido usar parametros dentro do statement, mas eu só tentei uma vez, demorou muito para descobrir como se faz e quando descobri achei que não valia a pena o esforço. Essa era uma das duas coisas mais dificieis de se achar na docuementação do firebird sobre parametros, a outra era usar queries parametrizadas em execute block.
Em 3 de julho de 2018 10:42, luapfirebird em yahoo.com.br <luapfirebird em yahoo.com.br> escreveu:
Pessoal estou com uma problema que acredito ser simples para os colegas.
Execute Block Returns ( Cod_Produto Varchar(35), Preco_Venda type of "Valores")As Declare variable vNomePreco VarChar(80);Begin vNomePreco = 'Preco_Venda_1';
Execute statement 'Select Distinct CP.Cod_Produto, ' || :vNomePreco || ' From Cadastro_Precos CP' || ' Where CP.COD_PRODUTO = ''1'' ' Into :Cod_Produto, :Preco_Venda; Suspend;
End
Essa Block funciona perfeitamente porem se eu trocar a linha
Execute statement 'Select Distinct CP.Cod_Produto, ' || :vNomePreco
Para
Execute statement 'Select Distinct CP.Cod_Produto, ' || IIF(:vNomePreco > 0, :vNomePreco, 1)
Vai dar o erro Conversion Error from String "Preco_Venda_1"
Fiquei sem entender Como eu poderia resolver isso ?
--
|
| A Vidy possui um Sistema de Gestão da Qualidade estruturado e com Certificação ISO 9001 há mais de 10 anos, mantendo seu foco na Qualidade e na Melhoria Continua.
Em março de2018 migramos com sucesso para a nova versão da ISO 9001.
Somos a única Empresa Brasileira de Engenharia de Laboratórios com certificação com o Escopo Completo; desde Projetos, Engenharia, Construção, Fabricação e Instalação de Laboratórios. |
| |
Mais detalhes sobre a lista de discussão lista