Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xmlagg中的多个xmlagg_Xml_Oracle_Plsql_Aggregate Functions - Fatal编程技术网

xmlagg中的多个xmlagg

xmlagg中的多个xmlagg,xml,oracle,plsql,aggregate-functions,Xml,Oracle,Plsql,Aggregate Functions,我有一个问题,我需要创建一个xml,其格式如下: <Root> <Bank>--Can be repeated <ID> <Credit>--Can be repeated <INFO> --Can be repeated </INFO> <Credit> </ID> </Bank> </Root> --可以

我有一个问题,我需要创建一个xml,其格式如下:

<Root>
<Bank>--Can be repeated
<ID> 
   <Credit>--Can be repeated
             <INFO> --Can be repeated
             </INFO>
   <Credit>
</ID>
</Bank>
</Root>

--可以重复
--可以重复
--可以重复
这就像xmlagg,变成xmlagg变成xmlagg

我有一张这样的桌子:

BANK| ID | CREDIT | INFO || 1 A1 B1 C1 1 A1 B1 C2 1 A1 B1 C3 1 A1 B2 D1 1 A1 B2 D2 1 A1 B1 C1 2 X1 Y1 Z1 银行|身份|信用|信息|| 1 A1 B1 C1 1 A1 B1 C2 1 A1 B1 C3 1 A1 B2 D1 1 A1 B2 D2 1 A1 B1 C1 2 X1 Y1 Z1 我想要像这样的XML:

<Root>   
<Bank> 1 </Bank>
<ID> A1 </ID>
   <CREDIT> B1 
             <INFO> C1 </INFO>
             <INFO> C2 </INFO>
             <INFO> C2 </INFO>
   </CREDIT>
   <CREDIT> B2 
             <INFO> D1 </INFO>
             <INFO> D2 </INFO>
   </CREDIT>
</ID>
<BANK> 2 </BANK>
<ID> X1 </ID>
<CREDIT> Y1</CREDIT>
<INFO> Z1 </INFO>
</Root>

1.
A1
地下一层
C1
C2
C2
地下二层
D1
D2
2.
X1
Y1
Z1

我希望你明白我的意思,谢谢

您的描述非常模糊,xml定义和示例不一致。还假设xml中的数据应该是不同的

WITH src (bank, id, credit, info) AS (
    SELECT 1, 'A1', 'B1', 'C1' FROM dual UNION ALL
    SELECT 1, 'A1', 'B1', 'C2' FROM dual UNION ALL
    SELECT 1, 'A1', 'B1', 'C3' FROM dual UNION ALL
    SELECT 1, 'A1', 'B2', 'D1' FROM dual UNION ALL
    SELECT 1, 'A1', 'B2', 'D2' FROM dual UNION ALL
    SELECT 1, 'A1', 'B1', 'C1' FROM dual UNION ALL
    SELECT 2, 'X1', 'Y1', 'Z1' FROM dual
),
credit_data AS (
    SELECT
        bank,
        id,
        XMLELEMENT("Credit", credit,
            XMLAGG(
                XMLELEMENT(INFO, info)
            )
        ) child_nodes
    FROM
        (SELECT DISTINCT * FROM src)
    GROUP BY
        bank, id, credit
),
bank_data AS (
    SELECT
    XMLELEMENT("Bank", bank,
        XMLELEMENT("ID", id,
            XMLAGG(
                child_nodes
            )
        )
    ) bank_nodes
FROM
    credit_data
GROUP BY
    bank, id
)
SELECT
    XMLSERIALIZE(
        DOCUMENT
        XMLELEMENT("Root", NULL,
            XMLAGG(
                bank_nodes
            )
        )
        INDENT SIZE = 2
    ) xml
FROM
    bank_data;