Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle :moyen le plus rapide en PL/SQL pour voir si la valeur existe :liste, VARRAY ou table temporaire

myGroup est-il un varray ? S'il s'agit d'une chaîne, essayez quelque chose comme :

select 1
  from dual
 where 'abc,NONE,def' like '%,NONE,%'

Il est difficile de suivre les contraintes sous lesquelles vous travaillez ... Si possible, faites tout à l'intérieur de sql et ce sera plus rapide.

Mise à jour :

Donc, si vous êtes déjà dans une unité plsql et que vous vouliez rester dans une unité plsql, la logique ci-dessus ressemblerait à ceci :

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;

si celui-ci est lui-même dans une boucle, faites la liste une fois comme :

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;

Essayez également instr qui est probablement plus rapide que like :

  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;

Je n'ai aucune idée si c'est plus rapide que les autres solutions mentionnées (il y a de bonnes chances), c'est autre chose à essayer.