在数据库中取值,怎么与一个数组里的值比较,想知道如何用pl/sql写? 
就是: 
     在数据库取值,然后与几个(已知值)进行比较,如果有那几个值,就把值显示出来;
     那几个已知值,本人打算用数组来存起来。

解决方案 »

  1.   

    declare
       type NVARRY is varray(5) of number;
       v_var NVARRY := NVARRY(1,2,3,4,5);
    begin
       for i in (select col1 from t ) loop
          for j in 1..v_var.count loop
             if v_var(j) = i.col1 then
                ...
             end if;
          end loop;
       end loop;
    end;
      

  2.   

    与数组比较的问题
    DECLARE
         TYPE Char_Type_Table IS TABLE OF VARCHAR2(256) INDEX BY BINARY_INTEGER;
          my_array  Char_Type_Table;
          v_b1    VARCHAR2(10);
         CURSOR C1 IS SELECT b1 FROM b;
    BEGIN
         my_array(1) := '01';
         my_array(2) := '02';
         my_array(3) := '03';
         open c1;
             loop
                fetch c1 into v_b1;
                exit when c1%notfound;
                  /*在这里,怎么样才能使用一个语句实现形如
           if v_b1 in ('01,'02','03') then
                     ....
                  end if;*/
                  来实现与数组的比较呢??????
                  if v_b1 in my_array then    ????
                     ....
                  end if;
             end loop;
          close c1;
    end;
    /
    请教各位,能否使用一个语句使一值直接与数组比较呢?
      

  3.   

    shiyiwan,我的数据库是8I,能支持你的写法不?
    其实我就是想这样:
          /*在这里,怎么样才能使用一个语句实现形如 
          if v_b1 in ('01,'02','03') then 
                    .... 
                  end if;*/ 
                  来实现与数组的比较呢?????? 
                  if v_b1 in my_array then    ???? 
      

  4.   

    也不是一个语句,就是用procedure  ,里面的那句有没有别的写法?
      

  5.   

    for j in 1..v_var.count loop
             if v_var(j) = i.col1 then
                ...
             end if;
          end loop;這個內循環就已經做比較了呀
      

  6.   

    LZ是要把数组传到数据库,然后用一个语句来查询出来吧这种问题我们是这样处理的:
    把数组中的多个值(可能是不定长数组)组成一个字符串instr,然后
    select * from table_x where c_y  in instr 这样就可以了
    具体的in 后的字符串要根据前台代码来写,
    比如用C#调用查询结果时,
    先 定义好一个字符串sqlstr:='select * from table_x where c_y  in ( ';
    sqlstr:=sqlstr|| instr||' )';open cursor for sqlstr;
    这样就OK了
      

  7.   

    CREATE TYPE phone AS TABLE OF NUMBER;   
    /
    CREATE TYPE phone_list AS TABLE OF phone;
    /SELECT t.COLUMN_VALUE from table(phone(1,2,3)) t;COLUMN_VALUE
    ------------
              1
              2
              3注意那个table表达式,关联查询一下就可以了还有一个方法,直接在where 语句里面写
    where xx in yourarray即可
      

  8.   

    where xx in yourarrayyourarray就是绑定变量,只在plsql中支持
      

  9.   

    其实我是想写在ORACLE ERP中的报表里的formula 里的function ,但好像不支持数组的写法,各位遇到过这样的情况么?
    8楼的:我是想  从数据库里取值出来跟一个数组里的值  比较呢~跟你的那个相反。