Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle:modo più veloce in PL/SQL per vedere se esiste un valore:List, VARRAY o Temp Table

myGroup è un varray? Se è una stringa, prova qualcosa come:

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

È difficile seguire i vincoli con cui stai lavorando... Se possibile, fai tutto all'interno di sql e sarà più veloce.

Aggiornamento:

Quindi, se sei già in un'unità plsql e desideri rimanere in un'unità plsql, la logica sopra sarebbe qualcosa del genere:

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 questo stesso è in un ciclo, crea l'elenco una volta come:

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;

Prova anche instr che è probabilmente più veloce di come:

  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;

Non ho idea se questo sia più veloce delle altre soluzioni menzionate (ha buone possibilità), sia qualcos'altro da provare.