在SELECT语句中使用数组?

时间:2014-06-13 08:05:13

标签: sql oracle plsql oracle11g oracle-sqldeveloper

我想在'select from..where..in(YYY)'语句中使用此数组。

我不想迭代数组值,我想在我的选择语句中使用整数

不幸的是,我发现只能迭代它:

  1  declare
  2    type array is table of varchar2(30) index by binary_integer;
  3    a array;
  4    procedure p( array_in array )
  5    is
  6    begin
  7      for i in 1..array_in.count loop
  8        dbms_output.put_line( array_in(i) );
  9      end loop;
 10    end;
 11  begin
 12    a(1) := 'Apple';
 13    a(2) := 'Banana';
 14    a(3) := 'Pear';
 15    p( a );
 16  end;
 17  /

2 个答案:

答案 0 :(得分:0)

您可以通过创建 function 返回您的数组来实现此目的。然后你可以将它用于选择:

  1. 创建外部类型和功能
  2. create or replace type t_array is table of varchar2(30);
    
    create or replace function list_of_fruits
        return t_array
      is
        l_ t_array:=t_array();
      begin
        l_.extend(); l_(l_.COUNT) := 'Apple';
        l_.extend(); l_(l_.COUNT) := 'Banana';
        l_.extend(); l_(l_.COUNT) := 'Pear';
        return l_;
      end list_of_fruits;
    /
    
    1. 以下是如何使用它:
    2. select * from (
                select 'Peter' this_and_that from dual
      union all select 'Joy'                 from dual
      union all select 'God'                 from dual
      union all select 'Pear'                from dual
      union all select 'Man'                 from dual
        )
       where this_and_that in (
             select column_value from (table( list_of_fruits() )) 
       );
      

      这里的技巧是使用table()函数为select创建一个SQL可用列表;我也很难发现 column_value 的名称......这是Oracle的一些内置常量:你怎么猜? / p>

答案 1 :(得分:0)

您也可以使用oracle定义的集合来实现此目的。请参阅下面的示例。

declare 

 a  sys.odcivarchar2list;

  begin
     a := sys.odcivarchar2list('Apple','Banana','Pear');

  for r in ( SELECT m.column_value m_value
             FROM table(a) m )
   loop
      dbms_output.put_line (r.m_value);
   end loop;
 end;