Oracle:PL / SQL中最快的方法,以查察是否存在值:List,VARRAY或
更新假如您想查察长原始题目,请查察编辑内容.这是题目的更简捷的短版本…… 我必要看看GroupA(不老是GroupA,这会改变每个轮回迭代)是否存在于200个阁下的组中的[list,varray,temp table,what].我怎样存储这200个组完全由我节制.但我想将它们存储在一个有助于最快“存在”搜查的结构中,由于我必需在一个轮回中针对差异的值(不老是GroupA)多次搜查此列表.那么PL / SQL最快,搜查列表…… 假如’GroupA’IN(‘GroupA’,’GroupB’)那么…… 或行使会员搜查VARRAY … IF 'GroupA' MEMBER OF myGroups THEN 或以这种方法搜查VARRAY …… FOR i IN myGroups.FIRST .. myGroups.LAST LOOP IF myGroups(i) = 'GroupA' THEN v_found := TRUE; EXIT; END IF; END LOOP; 或搜查关联数组…… 更新:从每小我私人的提议测试的最终功效 逗号脱离列表,譬喻:,GroupA,GroupB,GroupC,…约莫200个组…(通过循漫游标建造的列表) FOR i IN 1 .. 10000000 loop if myGroups like '%,NONE,%' then z:=z+1; end if; end loop; --690msec 沟通的逗号脱离列表(循漫游标建造的列表)… FOR i IN 1 .. 10000000 loop if instr(myGroups,',') > 0 then z:=z+1; end if; end loop; --818msec varray,沟通的200组(散装网络的varray)…… FOR i IN 1 .. 10000000 loop IF 'NONE' MEMBER of myGroups THEN z:=z+1; end if; end loop; --780msec @Yaroslav Shabalin提议的关联数组要领(通过循漫游标建造的关联数组)… FOR i IN 1 .. 10000000 loop if (a_values('NONE') = 1) then z:=z+1; end if; end loop; --851msec 办理要领myGroup是varray吗?假如它是一个字符串实行相同于:select 1 from dual where 'abc,def' like '%,%' 很难遵循你正在行使的束缚……假如也许的话,在sql中做统统,它会更快. 更新: 以是,假如你已经在一个plsql单位中,并但愿保存在一个plsql单位中,那么上面的逻辑将是这样的: declare gp varchar2(200) := 'abc,def,higlmn,op'; begin if ','||gp||',' like '%,%' then dbms_output.put_line('y'); else dbms_output.put_line('n'); end if; end; 假如这个自己处于轮回中,那么将列表设为: declare gp varchar2(200) := 'abc,op'; gp2 varchar2(200) := ',' || gp || ','; begin if g2 like '%,%' then dbms_output.put_line('y'); else dbms_output.put_line('n'); end if; end; 也实行instr,它也许比以下更快: declare gp varchar2(200) := ',abc,hig,'; begin if instr(gp,') > 0 then dbms_output.put_line('y'); else dbms_output.put_line('n'); end if; end; 我不知道这是否比其他提到的办理方案更快(这是一个很好的机遇),这是另一回事. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |