我想在'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 /
答案 0 :(得分:0)
您可以通过创建 function
返回您的数组来实现此目的。然后你可以将它用于选择:
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;
/
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;