2009-07-16 90 views
68

在嘗試使用Oracle SQL Developer我不斷產生「輸入替換值」的提示執行SQL INSERT語句:的Oracle SQL轉義字符(一個「&」)

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

我已經嘗試使用escaping the special character in the query的「\ '上面,但我仍然無法避免「&」符號'&',導致字符串替換。

來吧小混混,讓我開心:)

回答

101

的&是定義默認值,它允許您使用替代變量。我喜歡把它關掉使用

SET DEFINE OFF

,那麼你就不用擔心逃逸或CHR(38)。

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

感謝Jeffrey Kemp提供的解決方案。 chr(38)|| – 2011-11-08 14:29:56

+0

這是一個更好的通用解決方案,它獨立於用戶權限(即,當用戶不允許SET DEFINE OFF時)以及用戶想要在同一SQL命令中指定文本和已定義變量的同和。 – fuzzyanalysis 2013-10-31 22:26:07

28

設置定義字符以外的東西比&

 
SET DEFINE ~ 
create table blah (x varchar(20)); 
insert into blah (x) values ('blah&amp'); 
select * from blah; 

X      
-------------------- 
blah&amp 

+26

或SET DEFINE OFF – dpbradley 2009-07-16 12:58:58

49

|| chr(38) ||

該解決方案是完美的。

+2

這可以完成工作,但在處理預先存在的字符串時有點笨拙。 – aglassman 2013-09-05 14:43:11

3

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

8
SELECT 'Free &' || ' Clear' FROM DUAL; 
1

真正的答案是,你需要設置轉義字符「\」: SET逃脫

可能發生的問題,或者是因爲轉義被禁用,或逃生字符被設置爲'\'以外的其他字符。以上聲明將使轉義將其設置爲'\'。


以前沒有發佈的其他答案實際上回答了原始問題。他們都解決了這個問題,但不解決問題。