Нужна помощь по XMLAgg в Oracle SQL - PullRequest
0 голосов
/ 18 января 2019

Я работаю над получением требуемой структуры XML с использованием XMLAgg в базе данных Oracle.

Вот формат данных: имя таблицы / представления: TA_LN_ITEM_COMPLIANCE_V

PROD_ID         COO Multiple_Coo    Country_code    HS  ECN
FT34204-10000AB null    US ??                 US    846711  XYZ
FT34204-10000AB null    US ??                 BE    8467119 ABC
FT34204-10000AB null    US ??                 CZ    8467119 CDG
FT34204-10000AB null    US ??                  1    8467119 NOCLASS
FT34204-10000AB null    US ??                 AU    8467119 NOCLASS

Пожалуйста, смотрите прикрепленное изображение для формата данных

select 
      xmlagg(xmlelement("DataArea",
      xmlelement("Item",
      xmlforest(
                a.prod_id AS "TA_ITEM",
                NVL(TO_CHAR(a.CTRY_OF_ORIGIN),' ') AS "CTRY_OF_ORIGIN",
                NVL(TO_CHAR(a.MULTIPLE_COO),' ') AS "MULTIPLE_COO"),
                ( select xmlagg(xmlelement("Item_Compliance",
                 xmlforest(
                           b.CTRY_CODE AS "CTRY_CODE",
                           b.EX_HS AS "EX_HS",
                           b.ECCNUM AS "ECCNUM"))) from TA_LN_ITEM_COMPLIANCE_V b where a.prod_id=b.prod_id)"Item_Compliance" ))).getClobVal() AS xml_frag
                           from TA_LN_ITEM_COMPLIANCE_V a,TA_LN_ITEM_COMPLIANCE_V b  where a.prod_id=b.prod_id

Ожидайте, что это будет:

<DataArea>
    <Item>
        <TA_ITEM>FT34204-10000AB</TA_ITEM>
        <CTRY_OF_ORIGIN>
        </CTRY_OF_ORIGIN>
        <MULTIPLE_COO>US ??</MULTIPLE_COO>
        <Item_Compliance>
            <CTRY_CODE>US</CTRY_CODE>
            <EX_HS>8467115040</EX_HS>
            <ECCNUM>XYZ</ECCNUM>
        </Item_Compliance>
        <Item_Compliance>
            <CTRY_CODE>BE</CTRY_CODE>
            <EX_HS>8467119</EX_HS>
            <ECCNUM>ABC</ECCNUM>
        </Item_Compliance>
        <Item_Compliance>
            <CTRY_CODE>CZ</CTRY_CODE>
            <EX_HS>8467119</EX_HS>
            <ECCNUM>CDG</ECCNUM>
        </Item_Compliance>
        <Item_Compliance>
            <CTRY_CODE>01</CTRY_CODE>
            <EX_HS>8467119</EX_HS>
            <ECCNUM>NOCLASS</ECCNUM>
        </Item_Compliance>
        <Item_Compliance>
            <CTRY_CODE>AU</CTRY_CODE>
            <EX_HS>8467119</EX_HS>
            <ECCNUM>NOCLASS</ECCNUM>
        </Item_Compliance>
    </Item>
</DataArea>
...