在您的other question 中,v_areas_hijas 不是表格。如果它是 SQL 中定义的集合类型,您可以使用 member of 集合运算符:
select idarea bulk collect into v_areas_hijas_tmp
from areas
where idareapadre member of v_areas_hijas;
例如,使用预定义类型sys.dbms_debug_vc2coll(更多示例请查看all_coll_types),
declare
t_demo sys.dbms_debug_vc2coll := sys.dbms_debug_vc2coll('X','Y','Z');
l_result integer;
begin
select count(*) into l_result
from dual
where dummy member of t_demo;
-- Or this:
select count(*) into l_result
from dual
where dummy in
( select column_value from table(t_demo) );
-- Or this:
select count(*) into l_result
from dual d
join table(t_demo) t on t.column_value = d.dummy;
dbms_output.put_line(l_result);
end;
您可以在包中声明的嵌套表和可变数组类型上使用table() 运算符:
create or replace package demo
as
type demo_collection_type is table of varchar2(1);
end demo;
然后
declare
t_demo demo.demo_collection_type := demo.demo_collection_type('X','Y','Z');
l_result integer;
begin
select count(*) into l_result
from dual
where dummy in
( select column_value from table(t_demo) t );
dbms_output.put_line(l_result);
-- Or:
select count(*) into l_result
from dual d
join table(t_demo) t on t.column_value = d.dummy;
dbms_output.put_line(l_result);
end;
从 12.1 开始,您不能将 member of 用于 PL/SQL 包中声明的集合类型。
其中一些限制在 12.2 中被取消。