Como usar lista em decode?

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
  

Mensagemem Sex, 22 Set 2017 4:28 pm

Boas senhores,
Preciso fazer um decode no where, mas uma das condições preciso passar uma lista e ai não rola...

lista = (49,58,60)

select 'teste' from dual
where '49' in (decode('a','a',lista,167))
Fiz assim
select 'teste' from dual
where '49' in (decode('a','a',49,58,60,167))

Tentei assim também...
where '49' in (decode('a','a',49||','||64,167))

Alguém tem a saída..
Obrigado
t+
xprata
Localização: São Paulo - SP

Mensagemem Qui, 28 Set 2017 2:24 pm

Precisei fazer algo semelhante recentemente, essa lista são de strings?

Verifica se consegue dessa forma abaixo:

Código: Selecionar todos
CREATE OR REPLACE TYPE t_in_list_tab AS TABLE OF VARCHAR2 (4000);
/


Código: Selecionar todos
CREATE OR REPLACE FUNCTION in_list (p_in_list  IN  VARCHAR2)
  RETURN t_in_list_tab PIPELINED
AS
  l_text  VARCHAR2(32767) := p_in_list || ',';
  l_idx   NUMBER;
BEGIN
  LOOP
    l_idx := INSTR(l_text, ',');
    EXIT WHEN NVL(l_idx, 0) = 0;
    PIPE ROW (TRIM(SUBSTR(l_text, 1, l_idx - 1)));
    l_text := SUBSTR(l_text, l_idx + 1);
  END LOOP;

  RETURN;
END;
/


Código: Selecionar todos
select 'teste'
from   dual
where '49' in (decode('a','a',SELECT column_value FROM TABLE(in_list('49,58,60')),167))


Referência: https://oracle-base.com/articles/misc/dynamic-in-lists
souldeath
Localização: Campinas

Mensagemem Qui, 28 Set 2017 5:45 pm

Obrigado pelo retorno, são string, mas tenho também opções numéricas.
Valeu vou testar...
xprata
Localização: São Paulo - SP



Voltar para PL/SQL

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 10 visitantes