我有提交“XmlInfo”的表格。此字段是 varchar2 并包含 XML。不要问为什么是 varchar2 - 这是旧的数据库结构。
我需要在这个 xml 中“添加”一个标签。所以我使用了 xmltype.createXML 和 APPENDCHILDXML 组合。问题在于输出。
原始字段没有缩进。所以首先我使用带有“无缩进”选项的 xmlserialize。不幸的是,这仅在 oracle 11 中可用,我需要在 oracle 10 和 11 上都使用此查询。
所以我使用变换。但我又被困住了。
原值:
<info><Managed>False</Managed></info>
预期的:
<info><Managed>False</Managed><ChangedDate>2013-09-11</ChangedDate></info>
我使用这个查询
select xmltype.createXML(t1.XmlInfo).APPENDCHILDXML('//info',XMLTYPE.CREATEXML('<ChangedDate>'|| to_char(sysdate, 'yyyy-mm-dd') ||'</ChangedDate>'))
.transform(xmltype(
'<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output omit-xml-declaration="yes" indent="no"/><xsl:template match="@*|node()"><xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:template></xsl:stylesheet>'
)).getStringVal()
from table1 t1
Oracle 11 中的结果(如预期的那样):
<info><Managed>False</Managed><ChangedDate>2013-09-11</ChangedDate></info>
Oracle 10 中的结果(有新行字符):
<info>
<Managed>False</Managed>
<ChangedDate>2013-09-11</ChangedDate>
</info>
这种转换有什么问题,或者有什么方法可以编写这个查询并在两个版本的 oracle 中按预期工作?
备注:在下一步我将不得不更新这个值,所以我将使用“updatexml”。这就是为什么我不能只连接两个字符串。