我有一个具有父子关系的查找表。它有一个具有父子关系的表列表以及要连接的键。我需要创建一个函数来递归地提取数据 使用动态查询从父表和子表中提取数据。在给定的示例中,必须从所有三个表中提取数据并从 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>
创建递归函数:
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 |
---|