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.

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).


60

|| chr(38) ||

To idealne rozwiązanie.


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 


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=');

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


4

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


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ą.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.