Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle:maneira mais rápida em PL/SQL para ver se o valor existe:List, VARRAY ou Temp Table


O myGroup é um varray? Se for uma string tente algo como:
select 1
  from dual
 where 'abc,NONE,def' like '%,NONE,%'

É difícil seguir as restrições sob as quais você está trabalhando... Se possível, faça tudo dentro do sql e será mais rápido.

Atualização:


Então, se você já estiver em uma unidade plsql e quiser ficar em uma unidade plsql, a lógica acima seria algo assim:
declare
    gp varchar2(200) := 'abc,def,NONE,higlmn,op';
  begin
    if ','||gp||',' like '%,NONE,%' then
      dbms_output.put_line('y');
    else
      dbms_output.put_line('n');
    end if;
  end;

se isso em si estiver em um loop, faça a lista uma vez como:
declare
    gp varchar2(200)  := 'abc,def,NONE,higlmn,op';
    gp2 varchar2(200) := ',' || gp || ',';
  begin
    if g2 like '%,NONE,%' then
      dbms_output.put_line('y');
    else
      dbms_output.put_line('n');
    end if;
  end;

Tente também instr que provavelmente é mais rápido do que como:
  declare
    gp varchar2(200) := ',abc,def,NONE,hig,';
  begin
    if instr(gp, ',NONE,') > 0 then
      dbms_output.put_line('y');
    else
      dbms_output.put_line('n');
    end if;
  end;

Não tenho ideia se isso é mais rápido que as outras soluções mencionadas (é uma boa chance), é outra coisa para tentar.