我对Oracle没有经验,在将数据导出为XML时遇到了问题。我设法使此查询工作,但XML的格式似乎是固定的,对我不起作用。查询如下:
SELECT value(em).getClobVal() AS "output"
FROM table(XMLSequence(Cursor
(
SELECT * FROM UserMain
)
)) em
我从中得到的是:
<ROW><STATUS>Active</STATUS><NAME>Joe Smith<NAME><PHONE>234-2345</PHONE>...</ROW>
<ROW><STATUS>Inactive</STATUS><NAME>Sally Smith<NAME><PHONE>234-4444</PHONE>...</ROW>
etc.
但我想要的是这样的,在输出的外面加上XML标记“ROWS”,如下所示:
<ROWS>
<RECORD><STATUS>Active</STATUS><NAME>Joe Smith<NAME><PHONE>234-2345</PHONE>...</RECORD>
<RECORD><STATUS>Inactive</STATUS><NAME>Sally Smith<NAME><PHONE>234-4444</PHONE>...</RECORD>
etc.
</ROWS>
那么,我需要对查询做些什么才能更改为输出并在输出周围放置外部标记呢?
2条答案
按热度按时间b91juud31#
几年前我发现了一个技巧,如果使用
XMLTYPE
并使用Oracletransform
函数将一些XSL模板应用到XMLTYPE
,则会出现意外行为:XML被格式化了。这是非常出乎意料的,从某种Angular 来说很有趣。这个
procedure
就可以做到:当然,您应该向函数传递一个有效的
XMLTYPE
,例如,在您的情况下,它应该是请注意,
encoding="iso-8859-1"
用于德语,您应该更改它以使用您的目的编码。如果你想在查询中使用它,你可以创建一个
function
而不是procedure
。你也可以在格式化之前添加额外的行,并在格式化之后删除它。这在Oracle 11.2中运行良好
lmvvr0a82#
上面的答案工作正常,但这是我最终选择的解决方案,因为它对于完整的实现来说更简单:
数据/功能部分如下:
这段代码基本上像游标一样工作,序列化内部查询的输出,为每个值添加“< fieldname>value< /fieldname>“,< ROW>< /ROW>在每行的开头和结尾加上““< ROWSET>< /ROWSET>。
然后,我有效地将输出 Package 在两个Replace()语句中,以更改Oracle数据中返回的默认标头。
希望这对其他人有用...