Página 1 de 1

Select com where buscando numa array ou matriz

Enviado: Sex, 21 Out 2022 3:28 pm
por carlynhos77
Ola, boa tarde

Estou precisando criar um select que busque liste dos departamentos para o usuário conforme uma lista de codigo, algo assim:

Selecionar tudo

Select DESCRICAO from TABELA_DEPARTAMENTOS where CODIGO_DEPARTAMENTO = minha_array[1,2,5]
Lembrando que esse [1,2,5] será variável, conforme seja feito no cadastro do usuario para quais departamento ele poderá ver

Então vou ter um Item de Aplicativo chamada G_ID_DEPARTAMENTO

após a autenticação, ela será carregada com o valor que estiver no cadastro do usuario, tipo por exemplo

Selecionar tudo

select DEPARTAMENTO INTO :G_ID_DEPARTAMENTO  from MEUS_USUARIOS where upper(usuario) = :APP_USER;
na aplicacao, eu teria um select pra lista os departamentos para aquele usuario determinado, tipo assim

Selecionar tudo

Select DESCRICAO from TABELA_DEPARTAMENTOS where CODIGO_DEPARTAMENTO = :G_ID_DEPARTAMENTO 
agradeço quem puder ajudar...

Re: Select com where buscando numa array ou matriz

Enviado: Sex, 21 Out 2022 10:25 pm
por carlynhos77
estou tentando assim, mas com a variavel não funciona

Selecionar tudo

 select CODIGO,
    CODIGO_EMPRESA,
    CODIGO_DEPARTAMENTO,
    CODIGO_BANCO,
    AGENCIA,
    CONTA,
    from FINANCEIRO_BANCO_CONTA where CODIGO_EMPRESA = :g_id_empresa and CODIGO_DEPARTAMENTO in[b] (:G_ID_DEPARTAMENTO)[/b] order by CODIGO_BANCO
porém, fiz o teste assim, dá certo

Selecionar tudo

 select CODIGO,
    CODIGO_EMPRESA,
    CODIGO_DEPARTAMENTO,
    CODIGO_BANCO,
    AGENCIA,
    CONTA,
    from FINANCEIRO_BANCO_CONTA where CODIGO_EMPRESA = :g_id_empresa and CODIGO_DEPARTAMENTO in[b] (1,21)[/b] order by CODIGO_BANCO
essa variavel :G_ID_DEPARTAMENTO, esta carregada com o valor 1,21

ou seja, era pra funcionar, mas fala q a variavel é numero invalido

Re: Select com where buscando numa array ou matriz

Enviado: Qui, 27 Out 2022 4:23 pm
por dr_gori
O ideal é construir uma variável com algum tipo de SEPARADOR. Por exemplo, ponto-e-vírgula, como no exemplo abaixo --> 'paulo@email.com;thomas@email.com'
Daí você pode rodar um TOKENIZER que transforma esses valores em ROWS.

Daí você pode usar assim:

Selecionar tudo

SELECT * 
FROM suatabela 
WHERE email IN (
                select REGEXP_SUBSTR(str, exp, 1, level) lista
                from (select 'paulo@email.com;thomas@email.com' str, '[^;]+' exp 
                    from dual) 
                connect by REGEXP_SUBSTR(str, exp, 1, level) is not null 
                )

Aqui tem vários exemplos de tokenizer:
viewtopic.php?t=753

Assim você evita criar um SQL dinâmico. (Que também seria uma solução).

Re: Select com where buscando numa array ou matriz

Enviado: Qui, 27 Out 2022 10:00 pm
por carlynhos77
ola, boa noite

Excelente, fiz os ajustes, conforme orientado, para chegar o valor do separador PONTO E VIRGULA, adequei para meu sistema, funcionou perfeitamente... muito obrigado

Re: Select com where buscando numa array ou matriz

Enviado: Sex, 28 Out 2022 12:08 pm
por dr_gori
Nem precisa ser pont-e-vírugla... Pode ser qualquer separador.
No exemplo citado, isso é definido aqui: [^;]