2009-07-16 17 views
68

Podczas próby wykonania instrukcji SQL insert używając Oracle SQL Developer Ciągle generowania „Wprowadź wartość zastępczą” prompt:Oracle SQL znak ucieczki (dla „&”)

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

Próbowałem escaping the special character in the query używając „\ "powyżej, ale nadal nie mogę uniknąć znaku ampersand" & ", powodując zamiana ciągów znaków.

Śmiało punków, aby mój dzień :)

Odpowiedz

101

& jest wartością domyślną dla zdefiniowania, który pozwala na korzystanie zmienne podstawienia. Lubię go wyłączyć za pomocą

SET DEF OFF

wtedy nie będzie musiał martwić się o ucieczce lub 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

Podziękowania dla Jeffreya Kempa za dostarczenie rozwiązania || chr (38) || –

+0

Jest to znacznie lepsze ogólne rozwiązanie, niezależne od uprawnień użytkownika (tj. Gdy użytkownicy nie mają uprawnień do ustawiania WYDRUKUJ OFF) oraz gdy użytkownicy chcą określać zarówno ampersandy w tekście, jak i zdefiniowane zmienne w tym samym poleceniu SQL. – fuzzyanalysis

28

Ustaw charakter określenia na coś innego niż &

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

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

+26

lub USTAW DEFINE OFF – dpbradley

49

|| chr(38) ||

To rozwiązanie jest idealne.

+2

Wykonuje to zadanie, ale jest trochę niezgrabny, gdy mamy do czynienia z istniejącymi wcześniej łańcuchami. – aglassman

+0

Daleko od ideału – EoinS

3

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

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

Prawdziwa odpowiedź trzeba ustawić znak ucieczki do „\”: SET ucieczki na

Problem może mieć miejsce albo dlatego ulatnianie był wyłączony, albo ucieczka Postać została ustawiona na coś innego niż "\". Powyższe zestawienie pozwoli na uniknięcie i ustawienia "\".


Żadna z wcześniejszych odpowiedzi nie zawiera odpowiedzi na oryginalne pytanie. Wszyscy pracują nad problemem, ale go nie rozwiązują.

+4

Przeczytałem na Ask Tom (https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1629001802771), że "SET ESCAPE to sqplus" izm". To byłaby tylko prawdziwa odpowiedź, gdyby pytanie dotyczyło SQL * Plus. –