【发布时间】:2019-12-03 22:32:37
【问题描述】:
我正在尝试使用各种现有函数生成一些 XML,例如 XMLELEMENT、XMLAGG...
但我似乎无法准确地生成我需要的东西。
我需要实现的是:
<GLEntries>
<GLEntry fac_pk="XXX">
<FinEntryLine lfa_num="X">
...
</FinEntryLine>
...
<PaymentTerms>
<PaymentTerm>XX</PaymentTerm>
...
</PaymentTerms>
</GLEntry>
...
</GLEntries>
所以在 GLEntries 中可以有多个 GLEntry,在 GLEntry 中可以有多个 FinEntryLine,在 PaymentTerms 中可以有多个 PaymentTerm。
这是我目前得到的:
<GLEntries>
<GLEntry entry="000049" status="E">
<FinEntryLine number="1"/>
<PaymentTerms>
<PaymentTerm entry="000049"/>
</PaymentTerms>
</GLEntry>
<GLEntry entry="000049" status="E">
<FinEntryLine number="2"/>
<PaymentTerms>
<PaymentTerm entry="000049"/>
</PaymentTerms>
</GLEntry>
</GLEntries>
GLEntry 是一个 invoice(facture table),FinEntryLine 是 invoice_line(ligne_de_facture table)。
使用以下代码:
SELECT XMLSERIALIZE (
CONTENT XMLELEMENT (
"GLEntries",
XMLAGG (
XMLELEMENT (
"GLEntry",
xmlattributes (TO_CHAR (fac_num) AS "entry",
'E' AS "status"),
XMLCONCAT(XMLELEMENT ("FinEntryLine", xmlattributes(to_char(lfa_num) as "number")
)),
XMLELEMENT("PaymentTerms",
XMLELEMENT("PaymentTerm", xmlattributes(fac_num as "entry"))
))))
VERSION '1.0')
AS xmlserialize_doc
FROM facture,
ligne_de_facture
WHERE lfa_fac_fk = fac_pk
and fac_pk = 365462;
我的问题是 PaymentTerms 元素对于存在的每个 FinEntryLine 都是重复的。
我尝试了多个版本,使用不同的 XMLAGG 和 XMLCONCAT,但找不到像我需要的那样工作的东西。
感谢任何帮助和建议。
编辑:表格定义:
事实:
fac_pk fac_num
10 000049
20 000050
ligne_de_facture:
lfa_pk lfa_fac_fk lfa_num
50 10 1
60 10 2
70 20 1
属性中的其余值是硬编码的。
谢谢
编辑: 在 Ghassan 的建议下,PaymentTerm 只出现一次,但有 2 个 GLEntry 元素,每个元素都有一个 FinEntryLine,我需要 1 个 GLEntry 和 2 个 FinEntryLine。
<GLEntries>
<GLEntry entry="000049" status="E">
<FinEntryLine number="1"/>
</GLEntry>
<GLEntry entry="000049" status="E">
<FinEntryLine number="2"/>
</GLEntry>
<PaymentTerms>
<PaymentTerm entry="000049"/>
</PaymentTerms>
</GLEntries>
【问题讨论】:
-
能否更新您的问题以添加表中的示例数据,以便我们运行您的查询以生成您当前的输出。