Oracle Dynamic Table在运行时创建



我尝试尝试搜索引擎。我有一个表格,它包含文本上下文,我正在获取一些根据查询的记录,然后我想在运行时动态创建的表上将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;

最新更新