是否可以直接在分层用户类型中进行选择?
想象这样的表结构:
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循环的情况下,这是否有可能实现?
parent_table
FOR
您可以使用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。
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)