小编典典

直接选择进入分层用户类型

sql

是否可以直接在分层用户类型中进行选择?

想象这样的表结构:

PARENT
------
ID
NAME

CHILD
-----
ID
PARENT_ID
NAME

另外,我有这样的用户类型:

create or replace type child_item as object
(
  ID NUMBER(10),
  NAME VARCHAR(255)
);

create or replace type children_table as table of child_item;

create or replace type parent_item as object
(
  ID NUMBER(10),
  NAME VARCHAR(255),
  CHILDREN CHILDREN_TABLE
);

create or replace type parent_table as table of parent_item;

和这样的语句:

select * from parent p inner join child c on p.id = c.parent_id;

现在,我希望该语句的结果在type对象中parent_table。在不使用复杂FOR循环的情况下,这是否有可能实现?


阅读 205

收藏
2021-04-28

共1个答案

小编典典

您可以使用COLLECT

SELECT parent_item(p.ID, 
                   p.NAME, 
                   CAST(COLLECT(child_item(c.id, c.NAME)) AS children_table))
  FROM PARENT p
 INNER JOIN child c ON p.id = c.parent_id
 GROUP BY p.ID, p.NAME

这将返回一个列表PARENT_ITEM,您可以将其批量收集到中PARENT_TABLE

您可以在外部查询中再次使用COLLECT来直接获取PARENT_TABLE:

SELECT CAST(COLLECT(parents) AS parent_table)
  FROM (SELECT parent_item(p.ID, 
                           p.NAME, 
                           CAST(COLLECT(child_item(c.id, c.NAME)) 
                             AS children_table)
                          ) parents
          FROM PARENT p
         INNER JOIN child c ON p.id = c.parent_id
         GROUP BY p.ID, p.NAME)
2021-04-28