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

Oracle:Hurtigste måde i PL/SQL at se, om der findes værdi:Liste, VARRAY eller Temp Tabel

Er myGroup en varray? Hvis det er en streng, prøv noget som:

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

Det er svært at følge de begrænsninger, du arbejder under... Hvis det overhovedet er muligt, så gør alt inde i sql, og det vil være hurtigere.

Opdatering:

Så hvis du allerede er i en plsql-enhed og ønskede at blive i en plsql-enhed, så ville logikken ovenfor se sådan ud:

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;

hvis dette i sig selv er i en løkke, så lav listen én gang 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;

Prøv også instr, som sandsynligvis er hurtigere end 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;

Jeg aner ikke, om det er hurtigere end de andre nævnte løsninger (det har en god chance), det er noget andet at prøve.



  1. JSON-formatfejl, selvom ekko matcher med DataTables

  2. Hvordan udfylder man automatisk et navn baseret på for- og efternavn i mysql?

  3. Visual Basic til applikationer i Microsoft Access

  4. SQL:Returner kun poster uden nogen tilknytninger, der opfylder kriterierne