在oracle里有一个数组,现在有一个值,我想知道这他值在数组中的哪个位置,除了遍历,还有其他更好的方法没有?

解决方案 »

  1.   

     本质上都是遍历,并且oracle没有提供相应的集合函数来直接查找。
      

  2.   


      1* create global temporary table tmp(name varchar2(10)) on commit preserve rows
    SQL> /表已创建。SQL> edi
    已写入 file afiedt.buf  1  declare
      2  v_name varchar2(10);
      3  num number;
      4  type ex_type is table of varchar2(10);
      5  ex_arr ex_type:=ex_type('aaa','bbb','ccc','scott','sys','system','wkc168');
      6  name varchar2(10);
      7  begin
      8  delete from tmp;
      9  commit;
     10  forall i in 1..ex_arr.count
     11  insert into tmp values(ex_arr(i));
     12  commit;
     13  select name,rn into v_name,num from (select name,rownum rn from tmp) where name=&n;
     14  dbms_output.put_line('数组ex_arr中的子集'||v_name||'的下标是:'||num);
     15* end;
    SQL> /
    输入 n 的值:  'scott'
    原值   13: select name,rn into v_name,num from (select name,rownum rn from tmp) where name=&n;
    新值   13: select name,rn into v_name,num from (select name,rownum rn from tmp) where name='scott';
    数组ex_arr中的子集scott的下标是:4PL/SQL 过程已成功完成。SQL> /
    输入 n 的值:  'wkc168'
    原值   13: select name,rn into v_name,num from (select name,rownum rn from tmp) where name=&n;
    新值   13: select name,rn into v_name,num from (select name,rownum rn from tmp) where name='wkc168';
    数组ex_arr中的子集wkc168的下标是:7PL/SQL 过程已成功完成。SQL> /
    输入 n 的值:  'ccc'
    原值   13: select name,rn into v_name,num from (select name,rownum rn from tmp) where name=&n;
    新值   13: select name,rn into v_name,num from (select name,rownum rn from tmp) where name='ccc';
    数组ex_arr中的子集ccc的下标是:3PL/SQL 过程已成功完成。SQL>