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
Responder
xprata
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 93
Registrado em: Ter, 06 Abr 2010 11:31 am
Localização: São Paulo - SP

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 tb...
where '49' in (decode('a','a',49||','||64,167))

Alguém tem a saída..
Obrigado
t+
souldeath
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Qua, 25 Ago 2010 9:39 am
Localização: Limeira

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

Verifica se consegue dessa forma abaixo:

Selecionar tudo

CREATE OR REPLACE TYPE t_in_list_tab AS TABLE OF VARCHAR2 (4000);
/

Selecionar tudo

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;
/

Selecionar tudo

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
xprata
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 93
Registrado em: Ter, 06 Abr 2010 11:31 am
Localização: São Paulo - SP

Obrigado pelo retorno, são string, mas tenho tb opções numéricas.
Valeu vou testar...
Responder
  • Informação
  • Quem está online

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