线性化Oracle嵌套表

wcm*_*sen 1 sql oracle plsql oracle11g

如何线性化嵌套表,嵌套表本身也包含嵌套表(注意:内部表可能具有不同的大小).假设我有以下类型声明:

CREATE OR REPLACE TYPE VECTOR
IS
  TABLE OF NUMBER;

CREATE OR REPLACE TYPE TABLE_OF_VECTOR
IS
  TABLE OF VECTOR;
Run Code Online (Sandbox Code Playgroud)

以下PL/SQL片段:

DECLARE
  number_table TABLE_OF_VECTOR;
  result_vector VECTOR;
BEGIN
  number_table := table_of_vector(vector(23, 4, 2222, 22222222),
    vector(2, 1, 766, 2), vector(2, 1, 5));
END;
Run Code Online (Sandbox Code Playgroud)

有没有办法我可以线性化number_table并将其在result_vector中的所有值存储为一个连续的数字列表?我想最终得到:

result_vector == vector(23, 4, 2222, 22222222, 2, 1, 766, 2, 2, 1, 5)
Run Code Online (Sandbox Code Playgroud)

Gar*_*ers 5

它确实如此,但它并不漂亮.

select cast(collect(b.column_value) as vector) 
from  table(table_of_vector(
             vector(23, 4, 2222, 22222222), 
             vector(2, 1, 766, 2), 
             vector(2, 1, 5))) a, 
      table(a.column_value) b;
Run Code Online (Sandbox Code Playgroud)

因此,表(...)部分将table_of_vector视为具有名称"COLUMN_VALUE"的列的"常规"表.然后我们将其视为另一个我称之为B的表.

SELECTed表达式获取组成'A'表中'B'表的所有单个数字,并将它们聚合到一个集合中(使用COLLECT).最后,我明确地将集合转换为VECTOR类型.