我将从我想要的输出开始:
<?xml version="1.0"?>
<Accounts>
<Account>
<variable1>variable1</variable1>
<variable2>variable2</variable2>
<variable3>variable3</variable3>
<variable4>variable4</variable4>
<variable5>variable5</variable5>
<variable6>variable6</variable6>
<Table>
<Row>
<Column1>row1col1</Column1>
<Column2>row1col2</Column2>
<Column3>row1col3</Column3>
</Row>
<Row>
<Column1>row2col1</Column1>
<Column2>row2col2</Column2>
<Column3>row2col3</Column3>
</Row>
<Row>
<Column1>row3col1</Column1>
<Column2>row3col2</Column2>
<Column3>row3col3</Column3>
</Row>
</Table>
</Account>
...
</Accounts>
这需要来自当前的 SQL 函数循环通过 Accounts 和每个帐户 ID 收集每个帐户上面的所有相关数据,例如变量 1、2、表等。因此,每个帐户 ID 它返回所有变量和表及其3 列和所有行。
因此,为了简化,对于每个 Account ID,XML 文件需要将上述结构附加到文件中。现在,当我尝试创建包含所有这些不同部分的 XML 文件时,我的困境就来了。
第一个问题是如何将表信息和变量信息组合成一个 XML 树。我知道可以使用表中的元素创建 XML 森林,但问题是每个帐户都有一组可变数据和一个表。我已经考虑过 table_to_xml 但这直接取自表,我不知道如何在 table/xml 之前附加变量元素。
我考虑过做文本数组:
for rec in execute cmd
loop
cmd:= 'select xmlelement(name "Account",
xmlelement(name "Variable1", '||var1||'))';
execute cmd into vtext
varray[n] := vtext;
n++
end loop;
然后可能将嵌套到 xmlelement 中的表格也作为文本数组。继续嵌套,直到我拥有所有的 ',然后在它们都在一起后将它们发送到 XML。
下一个问题是将所有这些帐户组合到同一个 XML 文件中的一个总体元素中。
如果有人对如何解决这个问题有任何想法,我将不胜感激。我觉得我在考虑整个过程,或者用 SQL 做这件事太荒谬了,也许我应该用 Python 这样的脚本语言来尝试这些操作。