我使用 APEX_DATA_EXPORT 创建了一个 XML 输出文件。 它工作正常,但我不明白如何更改(如果可能)属性和元素的结构和名称。
csv 格式的示例输出效果很好:
参考 | BIC | 国际银行账号 | 金额 | 付款日期 |
---|---|---|---|---|
AB8473 | BICX 123 45 | DE 1349134913 | 999 | 2022-03-31T00:00:00 |
ZAB9574 | BICX 123 45 | DE 1349134913 | 156 | 2022-03-31T00:00:00 |
XY1245 | BICX 123 45 | DE 1349134913 | 123 | 2022-03-31T00:00:00 |
XML 输出示例
<ROWSET>
<ROW>
<Reference>AB8473 </Reference>
<BIC>BICX 123 45</BIC>
<IBAN>DE 1349134913</IBAN>
<Amount>999</Amount>
<PaymentDate>2022-03-31T00:00:00</PaymentDate>
</ROW>
<ROW>
<Reference>ZAB9574 </Reference>
<BIC>BICX 123 45</BIC>
<IBAN>DE 1349134913</IBAN>
<Amount>156</Amount>
<PaymentDate>2022-03-31T00:00:00</PaymentDate>
</ROW>
</ROWSET>
...
我在 中找不到任何内容 Oracle 参考
如何更改名称 ROWSET / ROW 并添加一些附加属性?
提前致谢, KBK
使用带有 XMLTABLE() 函数的 xml 输出,您可以获取表格形式的数据。
WITH -- S a m p l e D a t a : (xml)
xml_tab (xml_data) AS
( Select XMLTYPE(
'<ROWSET>
<ROW>
<Reference>AB8473 </Reference>
<BIC>BICX 123 45</BIC>
<IBAN>DE 1349134913</IBAN>
<Amount>999</Amount>
<PaymentDate>2022-03-31T00:00:00</PaymentDate>
</ROW>
<ROW>
<Reference>ZAB9574 </Reference>
<BIC>BICX 123 45</BIC>
<IBAN>DE 1349134913</IBAN>
<Amount>156</Amount>
<PaymentDate>2022-03-31T00:00:00</PaymentDate>
</ROW>
</ROWSET>')
From Dual
),
...创建 cte 以从 xml 中获取数据行
tbl AS
( Select xt.REFER, xt.BIC, xt.IBAN, xt.AMT, To_Date( SubStr(xt.PAYDT, 1, 10), 'yyyy-mm-dd' ) "PAYDT"
From xml_tab x,
XMLTABLE('/ROWSET/ROW'
PASSING x.xml_data
COLUMNS REFER VARCHAR2(16) PATH 'Reference',
BIC VARCHAR2(16) PATH 'BIC',
IBAN VARCHAR2(32) PATH 'IBAN',
AMT NUMBER(16, 2) PATH 'Amount',
PAYDT VARCHAR2(32) PATH 'PaymentDate'
) xt
)
测试结果:
Select * From tbl;
/* R e s u l t :
REFER BIC IBAN AMT PAYDT
---------------- ---------------- -------------------------------- ---------- --------
AB8473 BICX 123 45 DE 1349134913 999 31.03.22
ZAB9574 BICX 123 45 DE 1349134913 156 31.03.22 */
...使用上面的数据集创建新的 xml,更改您需要更改的内容并添加您需要添加的内容。 有一组 xml 函数 可以帮助您完成它。
这里,ROWSET 更改为 Transactions,ROW 更改为 Transaction,并且在 TransactionReference (RowNumber) 中添加了一个属性。其他一些标签也被重命名。
SELECT XMLELEMENT("Transactions",
XMLAGG(XMLELEMENT("Transaction",
XMLELEMENT("TransactionReference", XMLATTRIBUTES(ROWNUM AS "RowNumber"), t.REFER),
XMLELEMENT("BIC", t.BIC),
XMLELEMENT("IBAN", t.IBAN),
XMLELEMENT("TransactionAmount", t.AMT),
XMLELEMENT("TransactionDate", To_Char(t.PAYDT, 'yyyy-mm-dd') || 'T00:00:00')
)
)
) AS "NEW_XML_DATA"
FROM tbl t;
/* R e s u l t : */
<Transactions>
<Transaction>
<TransactionReference RowNumber="1">AB8473 </TransactionReference>
<BIC>BICX 123 45</BIC>
<IBAN>DE 1349134913</IBAN>
<TransactionAmount>999</TransactionAmount>
<TransactionDate>2022-03-31T00:00:00</TransactionDate>
</Transaction>
<Transaction>
<TransactionReference RowNumber="2">ZAB9574 </TransactionReference>
<BIC>BICX 123 45</BIC>
<IBAN>DE 1349134913</IBAN>
<TransactionAmount>156</TransactionAmount>
<TransactionDate>2022-03-31T00:00:00</TransactionDate>
</Transaction>
</Transactions>