Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle UpdateXML()添加CDATA_Xml_Oracle_Plsql_Oracle12c_Xmltype - Fatal编程技术网

Oracle UpdateXML()添加CDATA

Oracle UpdateXML()添加CDATA,xml,oracle,plsql,oracle12c,xmltype,Xml,Oracle,Plsql,Oracle12c,Xmltype,我有一个带有XMLType列的表。我编写了一个匿名块来循环通过符合特定条件的行,然后它将查看每个记录,并在需要时更新一些XML 存储在表中的原始XML如下所示: SELECT xml.txtValue INTO strValue FROM my_table s, XMLTable('/PATH/*' PASSING s.xmlTypeColumn COLUMNS txtValue VARCHAR2(10

我有一个带有
XMLType
列的表。我编写了一个匿名块来循环通过符合特定条件的行,然后它将查看每个记录,并在需要时更新一些XML

存储在表中的原始XML如下所示:

SELECT xml.txtValue
  INTO strValue
  FROM my_table s,
       XMLTable('/PATH/*'
                PASSING s.xmlTypeColumn
                COLUMNS txtValue     VARCHAR2(100 CHAR)   PATH   'VALUES/text()') xml
 WHERE s.pk = 1234
   AND xml.txtValue like '%Value%';

我的循环将从每个块中拉出现有值,如下所示:

SELECT xml.txtValue
  INTO strValue
  FROM my_table s,
       XMLTable('/PATH/*'
                PASSING s.xmlTypeColumn
                COLUMNS txtValue     VARCHAR2(100 CHAR)   PATH   'VALUES/text()') xml
 WHERE s.pk = 1234
   AND xml.txtValue like '%Value%';
结果是变量
strValue
包含:'Value',然后我对其进行计算和操作,等等

下面是脚本更新部分的简化示例(删除了循环和业务逻辑,用一条特定记录显示我的问题):

结果是XML中的特定路径更新为:

'新价值&apos

如果我按以下方式更改代码:

   SELECT UPDATEXML (my_xml, '/PATH/VALUES/text()', '<![CDATA[''NewValue'']]>')
…结果是:

…没有转义的
&apos插入的字符

因此,无论版本号如何,
UpdateXML()
在不同的Oracle实例上的工作方式可能不同。

多亏了,答案是:

SELECT UPDATEXML (my_xml, '/PATH/VALUES/text()', XMLCdata('''NewValue'''))
  INTO my_new_xml
  FROM DUAL;

看看XMLCDATA函数。应该可以用你的新价值来称呼它。是的,就是这样,谢谢!
SELECT UPDATEXML (my_xml, '/PATH/VALUES/text()', XMLCdata('''NewValue'''))
  INTO my_new_xml
  FROM DUAL;