DBMS_SQL.NUMBER_TABLE
是一个关联数组:
与数据库表不同,关联数组:
- 不需要磁盘空间或网络操作
- 无法使用 DML 语句进行操作
您可以select into
使用关联数组,但不能将其用作select
.
您可以select into
使用嵌套表,但如果在块中声明类型,您仍然不能使用它,select
因为它将是在 SQL 语句中无效的 PL/SQL 类型。
您将需要在 SQL 中定义的嵌套表类型(即不在 PL/SQL 中)来实现这一点。有一个内置类型使它更容易,但您可以定义自己的:
declare
v_table sys.odcinumberlist;
v_table2 sys.odcinumberlist;
begin
select a_id bulk collect into v_table
from (select a_id from b where length(b_data) > 4);
select a.a_id bulk collect into v_table2
from table(v_table) vt
join a on a.a_id = vt.column_value;
end;
/
anonymous block completed
你显示的第二个select
不完整,所以我编了一个。您的第一个不需要嵌套select
,可以简化为:
select a_id bulk collect into v_table
from b
where length(b_data) > 4;
希望您在第二次之前对收藏有所了解select
,否则这有点毫无意义;您可以在第二个中加入a
以获得相同的结果:b
select
select a.<columns> ...
from a
join b on b.a_id = a.a_id
where length(b.b_date) > 4;