sql >> Databasteknik >  >> RDS >> Oracle

Oracle:snabbaste sättet i PL/SQL att se om värdet finns:List, VARRAY eller Temp-tabell

Är myGroup en varray? Om det är en sträng prova något i stil med:

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

Det är svårt att följa de begränsningar du arbetar under... Om det är möjligt, gör allt inuti sql och det kommer att gå snabbare.

Uppdatering:

Så om du redan är i en plsql-enhet och vill stanna i en plsql-enhet så skulle logiken ovan se ut ungefär så här:

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;

om detta i sig är i en loop, gör listan en gång som:

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 också instr som förmodligen är snabbare än som:

  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;

Jag har ingen aning om det är snabbare än de andra lösningarna som nämns (det har en god chans), det är något annat att prova.



  1. PostgreSQL JDBC-drivrutinen fungerar inte för Heroku DB Connection

  2. Hur räknar man antalet element i alla Oracle varrays från tabellen?

  3. Eliminera och minska överlappande datumintervall

  4. Problem med att försöka använda MySQL tillsammans med Emacs