[firebase-br] Utilizar variável Varchar em IN
Carlos Andrade
krlosgilson em gmail.com
Sex Jan 17 13:25:09 -03 2020
Cantu, obrigado pela ajuda! Eu acabei tendo a idéia de criar uma SP para
fazer tal conversão, ficou desta forma:
create or alter procedure sp_util_strtoints (
istr varchar(1000),
idelimiter varchar(1))
returns (
oint integer)
as
declare variable vint varchar(20);
begin
/* Retorna todos os numeros inteiros de ISTR delimitados por
IDELIMITER */
istr = trim(:istr); -- Remove espacos
if (substring(:istr from char_length(:istr) for 1) <> :idelimiter)
then -- se nao existir o caractere delimitador no final de ISTR
istr = :istr||:idelimiter; -- Acrescenta o caractere delimitador em
ISTR
while (:istr <> '') do
begin
vint = substring(:istr from 1 for position(:idelimiter, :istr)-1);
istr = trim(substring(:istr from char_length(:vint)+2 for
char_length(:istr)));
oint = :vint;
suspend;
end
end
E na cláusula where da minha SP em questão, ficou assim:
where ( (:itiposmov = '') or (M.TIPOMOV in ((select OINT from
SP_UTIL_STRTOINTS(:itiposmov, ',')))) )
> Da forma que vc está fazendo não é possível.
>
> Mas vc pode usar o "for execute statement" montando o comando em
> runtime. Dependendo você pode tb tentar substituir o "in" por
> containing (mas não vai usar índice).
>
> []s
> Carlos H. Cantu
> eBook Guia de Migração para o FB 3 -www.firebase.com.br/guiafb3.php
> www.FireBase.com.br -www.firebirdnews.org - blog.firebase.com.br
>
> CA> Olá! Seria possível utilizar uma variável do tipo varchar com "IN"
> CA> dentro de uma cláusula "where"?
>
> CA> Por ex:
>
> CA> create or alter procedure SP_CONTAS_MOV (
> CA> itiposmov varchar (50)
> CA> ) returns (
> CA> oid integer,
> CA> odescricao varchar(50))
> CA> as
> CA> begin
> CA> for
> CA> select M.ID, M.DESCRICAO
> CA> from CONTAS_MOV M
> CA> where ( (:itiposmov = '') or (M.TIPOMOV in (:itiposmov)) ) -- Aqui
> CA> como ficaria?
> CA> into :oid, odescricao
> CA> do suspend;
> CA> end
>
> CA> o campo "M.TIPOMOV" é do tipo Integer. Desta forma está dando erro de
> CA> conversão de string.
Mais detalhes sobre a lista de discussão lista