sql >> Databáze >  >> RDS >> Oracle

Oracle:Nejrychlejší způsob v PL/SQL, jak zjistit, zda hodnota existuje:Seznam, VARRAY nebo Temp Table

Je myGroup varray? Pokud je to řetězec, zkuste něco jako:

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

Je těžké dodržovat omezení, pod kterými pracujete... Pokud je to vůbec možné, dělejte vše uvnitř sql a bude to rychlejší.

Aktualizace:

Takže pokud jste již v jednotce plsql a chtěli byste zůstat v jednotce plsql, výše uvedená logika by vypadala asi takto:

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;

pokud je toto samo ve smyčce, vytvořte seznam jednou jako:

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;

Zkuste také instr, který je pravděpodobně rychlejší než jako:

  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;

Netuším, jestli je to rychlejší než ostatní zmíněná řešení (má to dobrou šanci), je to něco jiného, ​​co zkusit.



  1. mysqldump:Nelze provést. Neznámá tabulka 'column_statistics' v information_schema

  2. jak můžeme změnit hodnotu pomocí přepínačů

  3. Chyba C++ MySQL Linker

  4. C# SSH tunel na MySQL server