Oracle分层查询构建xml输出

问题描述 投票:0回答:1

我有一个具有父子关系的查找表。它有一个具有父子关系的表列表以及要连接的键。我需要创建一个函数来递归地提取数据 使用动态查询从父表和子表中提取数据。在给定的示例中,必须从所有三个表中提取数据并从 HR 开始分层显示。可能有任意数量的子记录。请帮忙。

Table      Parent       PK     Parent_PK
HR                      Id
Department HR           Deptid Id
Emp        Department   Depid  depid   


<?ml version="1.0"?>                                                            
<HR>                                                                            
  <Department>                                                                                                                                                     
   <Emp> 
   </Emp>    
   <Department>                                                                         
</Hr> 
sql xml oracle dynamic hierarchy
1个回答
0
投票

创建递归函数:

CREATE FUNCTION generate_xml(
  i_name IN VARCHAR2,
  i_pk   IN VARCHAR2
) RETURN XMLTYPE
IS
  v_xml XMLTYPE;
BEGIN
  SELECT XMLELEMENT(
           EVALNAME i_name,
           XMLAGG(
             generate_xml(table_name, pk)
           )
         )
  INTO   v_xml
  FROM   table_name
  WHERE  parent_pk = i_pk;
  RETURN v_xml;
END;
/

然后你可以使用:

SELECT XMLSERIALIZE(
         DOCUMENT generate_xml(table_name, pk)
         AS CLOB
         VERSION '1.0'
       ) AS xml
FROM   table_name
WHERE  parent_pk IS NULL;

对于样本数据:

CREATE TABLE table_name (Table_name, Parent, PK, Parent_PK) AS
SELECT 'HR',         NULL,         'Id',     NULL     FROM DUAL UNION ALL
SELECT 'Department', 'HR',         'Deptid', 'Id'     FROM DUAL UNION ALL
SELECT 'Emp',        'Department', 'Depid',  'Deptid' FROM DUAL;

输出:

XML



  
    
  


小提琴

© www.soinside.com 2019 - 2024. All rights reserved.