sql >> Database >  >> RDS >> Oracle

Oracle:snelste manier in PL/SQL om te zien of waarde bestaat:lijst, VARRAY of tijdelijke tabel

Is myGroup een varray? Als het een string is, probeer dan iets als:

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

Het is moeilijk om de beperkingen te volgen waaronder u werkt... Als het enigszins mogelijk is, doe dan alles binnen sql en het zal sneller zijn.

Bijwerken:

Dus als je al in een plsql-eenheid zit en in een plsql-eenheid wilt blijven, dan zou de bovenstaande logica ongeveer als volgt gaan:

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;

als dit zelf in een lus zit, maak de lijst dan één keer als:

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;

Probeer ook instr die waarschijnlijk sneller is dan:

  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;

Ik heb geen idee of dit sneller is dan de andere genoemde oplossingen (de kans is groot), het is iets anders om te proberen.



  1. Het Halloween-probleem - Deel 3

  2. BLOB gebruiken in waar-clausule in MySQL

  3. SELECT INTO OUTFILE toestemming geweigerd, maar de gebruiker kan naar de map schrijven

  4. MySQL wordt onverwacht afgesloten op XAMPP - Server-socket gemaakt op IP:'::'