我尝试尝试搜索引擎。我有一个表格,它包含文本上下文,我正在获取一些根据查询的记录,然后我想在运行时动态创建的表上将ID的基础文本传输。我的SQL代码如下,但是此错误
"expression is of wrong type"
SQL
declare
v_table dbms_sql.number_table;
begin
select a_id bulk collect into v_table from (select a_id from b where length(b_data) > 4);
select * from a where a_id in v_table;
end;
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
之前的收藏中有一些东西,否则有点毫无意义。您可以在第二个select
中将a
加入CC_11,以获得相同的结果:
select a.<columns> ...
from a
join b on b.a_id = a.a_id
where length(b.b_date) > 4;