求Oracle中实现SQL Server每行生成XML文件的等效脚本
Oracle等效脚本:为每行生成独立XML元素
你的SQL Server脚本通过CROSS APPLY结合FOR XML PATH('row'), ELEMENTS实现了为表中每行生成独立的<row> XML元素,以下是两种可行的Oracle实现方案:
方案1:使用SYS_XMLGEN函数(简洁高效)
这个函数可以直接为单行数据生成指定根元素的XML,无需手动列所有字段:
SELECT t.*, SYS_XMLGEN(t, XMLFormat('row')) AS row_xml FROM your_table t;
XMLFormat('row')指定XML的根节点为<row>,和SQL Server的PATH('row')对应- 默认会将每行的所有列作为
<row>的子元素,等价于SQL Server的ELEMENTS选项 - 返回的
row_xml是XMLTYPE类型,若需要字符串格式,可调用GETSTRINGVAL()方法:SYS_XMLGEN(t, XMLFormat('row')).GETSTRINGVAL()
方案2:手动构造XML(精准控制结构)
如果需要自定义XML的元素名称或结构,可以用XMLELEMENT和XMLFOREST手动拼接:
SELECT t.*, XMLELEMENT("row", XMLFOREST( t.id AS "id", t.name AS "name", t.create_time AS "create_time" -- 依次列出表中所有需要包含的列 ) ) AS row_xml FROM your_table t;
XMLELEMENT("row", ...)创建根节点<row>XMLFOREST(...)将每个列转换为<row>的子元素,AS "xxx"指定元素名称(可选,默认用列名)
为什么你当前的脚本不符合需求
你使用的dbms_xmlgen.getxml('select * from table')是执行整个表的查询并返回所有行的XML,因此每行都会重复输出整个表的XML内容,而不是当前行的独立XML。
内容的提问来源于stack exchange,提问作者KPNa518
相关产品推荐
相关产品推荐

