Oracle SQL转义字符(用于'&')


86

尝试使用Oracle SQL Developer执行SQL插入语句时,我不断生成“输入替换值”提示:

insert into agregadores_agregadores 
(
 idagregador,
 nombre,
 url
) 
values 
(
 2,
 'Netvibes',
 'http://www.netvibes.com/subscribe.php?type=rss\&url='
);

我已经尝试使用上面的'\'来转义查询中的特殊字符,但是我仍然无法避免&符'&'引起字符串替换。

Answers:


124

&是DEFINE的默认值,它允许您使用替换变量。我喜欢使用关闭它

设定关闭

那么您就不必担心逃逸或CHR(38)。


59

|| chr(38) ||

这个解决方案是完美的。


2
这可以完成工作,但是在处理预先存在的字符串时有点笨拙。
aglassman 2013年

对我来说,SET DEFINE OFF无效。您的解决方案将会成功。谢谢...
Ashok kumar,

31

将定义字符设置为&以外的其他字符

设定定义〜
创建表等等(x varchar(20));
插入blah(x)值('blah&amp');
选择*从等等;

X                    
-------------------- 
等等 


27
或关闭设置
dpbradley,2009年

15
insert into AGREGADORES_AGREGADORES (IDAGREGADOR,NOMBRE,URL)
values (2,'Netvibes',
'http://www.netvibes.com/subscribe.php?type=rss' || chr(38) || 'amp;url=');

感谢Jeffrey Kemp为||提供解决方案。chr(38)||

这是一种更好的通用解决方案,它独立于用户特权(即,不允许用户设置SET FINE OFF)以及当用户希望在同一SQL命令中同时在文本中指定“&”号和定义的变量时。
模糊分析

12
SELECT 'Free &' || ' Clear' FROM DUAL;

4

select 'one'||'&'||'two' from dual


“与”号仅需位于字符串的末尾,从而节省了串联的一半。select 'one&' || 'two' from dual
durette

1

真正的答案是您需要将转义字符设置为“ \”:SET ESCAPE ON

可能是由于禁用了转义,或者转义字符被设置为'\'以外的其他字符而引起的问题。上面的语句将启用转义并将其设置为“ \”。


先前发布的其他答案均未真正回答原始问题。他们都可以解决该问题,但不能解决。


4
我在Ask Ask(Asktom.oracle.com/pls/asktom/…)上读到“ SET ESCAPE是一种sqplus'ism”。因此,仅当问题与SQL * Plus有关时,这才是真正的答案。
Karl Kieninger 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.