Oracle 如何在XMLTYPE中获取符号和值
我有以下疑问:Oracle 如何在XMLTYPE中获取符号和值,oracle,plsql,xmltype,Oracle,Plsql,Xmltype,我有以下疑问: select XMLType('<root> <TPL> <fld>f7</fld><val>v1v2</val> </TPL> </root>') from dual; 当我执行上述查询时,它执行得非常好,我得到以下输出: <root> <TPL> <fld>f7</fld><val>v1v2&
select XMLType('<root>
<TPL>
<fld>f7</fld><val>v1v2</val>
</TPL>
</root>') from dual;
当我执行上述查询时,它执行得非常好,我得到以下输出:
<root>
<TPL>
<fld>f7</fld><val>v1v2</val>
</TPL>
</root>
但当我执行以下我的要求时:
select XMLType('<root>
<TPL>
<fld>f7</fld><val>v1&v2</val>
</TPL>
</root>') from dual;
我被要求在弹出屏幕中输入“&”的值
我尝试了以下两种方法:
select XMLType('<root>
<TPL>
<fld>f7</fld><val>v1&v2</val>
</TPL>
</root>') from dual;
select XMLType('<root>
<TPL>
<fld>f7</fld><val>v1''&''v2</val>
</TPL>
</root>') from dual;
但仍无法正确获取输出,应为:
<root>
<TPL>
<fld>f7</fld><val>v1&v2</val>
</TPL>
</root>
如何实现这一点?而不是使用v1&v2或v1&;v2,尝试使用v1'| | chr38 | | v2'或'v1&'| | |'v2'
chr38是用于安培表的ASCII码,第二个选项只是一种不同的连接方法。希望这有帮助 我打赌您在查询时使用的是SQLDeveloper。试运行设置定义关闭;并且不会提示您输入值 此外,在创建XMLType对象时,应该转义非法字符,因此以下操作将起作用:
SET DEFINE OFF;
select XMLType('<root>
<TPL>
<fld>f7</fld><val>v1&v2</val>
</TPL>
</root>') from dual;
这里有两个问题-&在oraclesql和XML中都是一个特殊字符,在这两种语言中都必须转义。cdb_dba给出了一些如何在SQL CHR38或字符串末尾转义它的示例,mkuligowski给出了如何在XML&;中转义它的示例;或者CDATA,但这两种转义需要结合使用。这里有几个例子:
-- with CHR() + CDATA
select XMLType('<root>
<TPL>
<fld>f7</fld><val><![CDATA[v1'|| chr(38) || 'v2]]></val>
</TPL>
</root>') from dual;
-- with ampersand at the end of a string + "amp" character reference
select XMLType('<root>
<TPL>
<fld>f7</fld><val>v1&' || 'amp;v2</val>
</TPL>
</root>') from dual;
您没有说您使用的是什么客户机,但这些选项应该适用于大多数客户机:我使用Toad for Oracle我使用Toad for Oracle,而不是SQL DeveloperWell,我使用的是Oracle 11.0.0.116版,SET DEFINE OFF不起作用SET DEFINE是一个SQLPlus命令,必须使用脚本引擎F5执行。F9只执行单个语句,不处理SQLPlus。感谢所有的帮助。但是上面的解决方案都不起作用。很抱歉,这两种方法实际上都不起作用。谢谢您的澄清!我通常不处理XMLType数据,因此如果我碰巧发现自己在该领域,我会将其添加到我的注意事项列表中:
-- with CHR() + CDATA
select XMLType('<root>
<TPL>
<fld>f7</fld><val><![CDATA[v1'|| chr(38) || 'v2]]></val>
</TPL>
</root>') from dual;
-- with ampersand at the end of a string + "amp" character reference
select XMLType('<root>
<TPL>
<fld>f7</fld><val>v1&' || 'amp;v2</val>
</TPL>
</root>') from dual;