Znak zmiany znaczenia Oracle SQL (dla „&”)

86

Podczas próby wykonania instrukcji wstawiania SQL za pomocą Oracle SQL Developer wciąż generuję monit „Wprowadź wartość podstawienia”:

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

Próbowałem uniknąć znaku specjalnego w zapytaniu za pomocą „\” powyżej, ale nadal nie mogę uniknąć znaku „&”, powodując podstawienie ciągu.

ian_scho
źródło

Odpowiedzi:

126

& jest domyślną wartością DEFINE, która pozwala na użycie zmiennych zastępczych. Lubię go wyłączać za pomocą

USTAW DEFINE OFF

wtedy nie będziesz musiał martwić się o ucieczkę lub CHR (38).

Neil Kodner
źródło
60

|| chr(38) ||

To idealne rozwiązanie.

Aseem
źródło
2
Wykonuje to zadanie, ale jest trochę niezgrabne, gdy mamy do czynienia z wcześniej istniejącymi ciągami.
aglassman,
U mnie nie działa funkcja SET DEFINE OFF. Twoje rozwiązanie zadziałało. Dziękuję ...
Ashok kumar
31

Ustaw zdefiniowany znak na coś innego niż &

USTAW DEFINE ~
utwórz tabelę bla (x varchar (20));
wstaw do wartości bla (x) („bla i amp”);
wybierz * z bla;

X                    
-------------------- 
bla i amp 

RC.
źródło
27
lub USTAW DEFINE OFF
dpbradley
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
źródło
Podziękowania dla Jeffrey'a Kempa za dostarczenie rozwiązania z || chr (38) ||
Jest to znacznie lepsze rozwiązanie ogólne, które jest niezależne od uprawnień użytkownika (tj. Gdy użytkownicy nie mogą USTAWIĆ DEFINE OFF) i gdy użytkownicy chcą określić ampersandy w tekście i zdefiniowane zmienne w tym samym poleceniu SQL.
Fuzzy Analysis
12
SELECT 'Free &' || ' Clear' FROM DUAL;
drj
źródło
4

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

Izo
źródło
Znak ampersand musi znajdować się tylko na końcu ciągu, oszczędzając połowę konkatenacji. select 'one&' || 'two' from dual
durette
1

Prawdziwą odpowiedzią jest to, że musisz ustawić znak zmiany znaczenia na „\”: SET ESCAPE ON

Problem mógł wystąpić, ponieważ ucieczka była wyłączona lub znak zmiany znaczenia został ustawiony na coś innego niż „\”. Powyższa instrukcja umożliwi ucieczkę i ustawi ją na '\'.


Żadna z pozostałych odpowiedzi zamieszczonych wcześniej nie odpowiada na pierwotne pytanie. Wszyscy rozwiązują problem, ale go nie rozwiązują.

Okropna Kijanka
źródło
4
Czytałem na Ask Tom ( asktom.oracle.com/pls/asktom/ ... ), że „SET ESCAPE to sqplus'ism”. Tak więc byłaby to prawdziwa odpowiedź tylko wtedy, gdyby pytanie dotyczyło SQL * Plus.
Karl Kieninger
-1

dodaj to przed swoją prośbą

set define off;
Helali
źródło