Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle:Schnellster Weg in PL/SQL, um zu sehen, ob ein Wert vorhanden ist:Liste, VARRAY oder temporäre Tabelle

Ist myGroup ein Varray? Wenn es sich um eine Zeichenfolge handelt, versuchen Sie Folgendes:

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

Es ist schwer, den Einschränkungen zu folgen, unter denen Sie arbeiten ... Wenn möglich, tun Sie alles innerhalb von SQL, und es wird schneller.

Aktualisierung:

Wenn Sie sich also bereits in einer plsql-Einheit befinden und in einer plsql-Einheit bleiben möchten, würde die obige Logik ungefähr so ​​aussehen:

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;

wenn dies selbst in einer Schleife ist, dann mache die Liste einmal zu:

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;

Versuchen Sie auch instr, das wahrscheinlich schneller ist als:

  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;

Ich habe keine Ahnung, ob dies schneller ist als die anderen genannten Lösungen (es besteht eine gute Chance), es ist etwas anderes zu versuchen.