在其中构造具有嵌套表的对象

时间:2016-02-09 18:50:54

标签: sql oracle plsql

我有一个包含一些嵌套表的对象,我想使用一个select语句来构造它。我的类型如下所示。

create or replace type number_table as table of number;
/
create or replace type multiple_tables as object
(
  num_table1 number_table,
  num_table2 number_table
)

以下基本上显示了我想做的事情,理想情况下只需要一个sql语句来避免上下文切换。

select multiple_tables(number_table
                       (select tblB.purchaseID from table_purchases tblB where tblB.customerID = tblA.customerID),
                       number_table
                       (select tblC.paymentID from table_payments tblC where tblC.customerID = tblA.customerID))
  from table_customer
 where table_customer.customerName = 'John Smith';

(具体错误是“ORA-00936:缺少表达”,如果有人想知道的话)

基本上,是否可以从另一个select语句中构造嵌套表?

2 个答案:

答案 0 :(得分:2)

使用CASTMULTISET运营商:

(n, 2)

<强>输出

(n, 1)

答案 1 :(得分:1)

您需要使用CAST MULTISET根据需要提取数据;查询的结构应该是这样的:

select multiple_tables(
       cast (multiset (select 1 from dual connect by level < 10 ) as number_table ),
       cast (multiset (select 1 from dual connect by level < 10 ) as number_table )
       )
from dual