sql >> Base de Datos >  >> RDS >> Oracle

Oracle:la forma más rápida en PL/SQL para ver si existe valor:lista, VARRAY o tabla temporal

¿Es myGroup un varray? Si es una cadena, intente algo como:

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

Es difícil seguir las restricciones bajo las que está trabajando... Si es posible, haga todo dentro de sql y será más rápido.

Actualización:

Entonces, si ya está en una unidad plsql y desea permanecer en una unidad plsql, la lógica anterior sería algo como esto:

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 esto en sí mismo está en un bucle, haga la lista una 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;

Prueba también con instr, que probablemente sea más rápido que:

  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;

No tengo idea si esto es más rápido que las otras soluciones mencionadas (tiene buenas posibilidades), es otra cosa que probar.