从 SQL select 生成 XML 文档 (IDOC) 时我遇到了困难。
XML 应如下所示:
<IDOC>
<MASTER>
.... some master elements ...
<NESTED1>
... 1st nested element instance 1...
</NESTED1>
<NESTED1>
... 1st nested element instance 2...
</NESTED1>
<NESTED2>
... instance 1
</NESTED2>
<NESTED2>
... instance 2
</NESTED2>
</MASTER>
<IDOC>
但是我得到的是这样的:
<IDOC>
<MASTER>
.... some master elements ...
<NESTED1>
... 1st nested element instance 1...
</NESTED1>
<NESTED2>
... instance 1
</NESTED2>
</MASTER>
<IDOC>
<IDOC>
<MASTER>
.... some master elements ...
<NESTED1>
... 1st nested element instance 1...
</NESTED1>
<NESTED2>
... instance 2
</NESTED2>
</MASTER>
<IDOC>
<IDOC>
<MASTER>
.... some master elements ...
<NESTED1>
... 1st nested element instance 2...
</NESTED1>
<NESTED2>
... instance 1
</NESTED2>
</MASTER>
<IDOC>
<IDOC>
<MASTER>
.... some master elements ...
<NESTED1>
... 1st nested element instance 2...
</NESTED1>
<NESTED2>
... instance 2
</NESTED2>
</MASTER>
<IDOC>
SQL生成XML数据集是这样的:
select
MASTER.COL1 as 'MASTER/COL1',
MASTER.COL2 as 'MASTER/COL2',
NESTED1.DATA1 as 'MASTER/NESTED1/DATA1',
NESTED2.TEXT1 as 'MASTER/NESTED2/TEXT1',
from MASTER
join NESTED1 on NESTED1.MASTER_PK = MASTER.MASTER_PK
join NESTED2 on NESTED2.MASTER_PK = MASTER.MASTER_PK
for xml PATH, ROOT('IDOC')
也许我没有正确阅读文档,但是我没有找到任何示例,如果我需要的是可能的以及应该使用哪些指令或参数。
您不按 MASTER.MASTER_PK 进行分组,因此您的 JOIN 生成的每个元组(master、nested1、nested2)都会获得 1 行,一旦您按 MASTER.MASTER_PK 进行分组,您将遇到另一个问题:您将得到叉积与该 MASTER_PK 相关的所有 NESTED1 和 NESTED2,因此解决方案是生成“NESTED1”和“NESTED2”节点列表,并使用子查询聚合 MASTER 节点中的结果。