如何在Oracle XMLTYPE中正确获取&符号值?
解决Oracle XMLType中包含&符号的问题
这问题我之前用SQLPlus时也踩过坑!核心原因是**Oracle的SQL客户端(比如SQLPlus、SQL Developer命令行模式)会把&当成变量替换的标记**,所以你才会弹出输入窗口——这和XML本身的转义规则是两回事,得两步走解决:
第一步:关闭客户端的变量替换功能
先执行这条命令,让客户端不再把&识别为变量占位符:
SET DEFINE OFF;
第二步:使用正确的XML转义写法
XML语法规定&必须转义为&,这样XMLType才能正确解析并最终输出为&。执行下面的查询:
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&amp;v2是转义了两次,相当于把&又转义了一遍,最终会显示&而不是& - 第二种用
''&''的方式是用来处理字符串中单引号的,对&的变量替换问题完全没用,还会让XML里多出不必要的单引号
替代方案(不全局关闭DEFINE)
如果你不想全局关闭变量替换,可以开启转义符,用\来转义&:
SET ESCAPE ON; SELECT XMLType('<root> <TPL> <fld>f7</fld><val>v1\&v2</val> </TPL> </root>') FROM dual;
不过这种方式不如直接关闭DEFINE来得直观。
内容的提问来源于stack exchange,提问作者vikky
相关产品推荐
相关产品推荐

