Управляющий символ Oracle SQL (для '&')

86

При попытке выполнить операторы вставки SQL с помощью Oracle SQL Developer я продолжаю генерировать запрос «Введите значение подстановки»:

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

Я пробовал экранировать специальный символ в запросе, используя "\" выше, но я все еще не могу избежать амперсанда "&", вызывающего подстановку строки.

ian_scho
источник

Ответы:

126

& - это значение по умолчанию для DEFINE, что позволяет использовать переменные подстановки. Мне нравится выключать его с помощью

УСТАНОВИТЬ ОПРЕДЕЛЕНИЕ ВЫКЛ.

тогда вам не придется беспокоиться об экранировании или CHR (38).

Нил Коднер
источник
60

|| chr(38) ||

Это решение идеальное.

Aseem
источник
2
Это выполняет свою работу, но это немного неудобно при работе с уже существующими строками.
aglassman 05
У меня SET DEFINE OFF не работал. Ваше решение сработало будет. Спасибо ...
Ашок Кумар
31

Установите для символа определения значение, отличное от &

УСТАНОВИТЬ ОПРЕДЕЛЕНИЕ ~
создать таблицу blah (x varchar (20));
вставить в значения blah (x) ('blah & amp');
выберите * из бла;

Икс                    
-------------------- 
бла & amp 

RC.
источник
27
или SET 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=');
Джеффри Кемп
источник
Спасибо Джеффри Кемпу за предоставление решения с || chr (38) ||
Это гораздо лучшее общее решение, которое не зависит от привилегий пользователя (т.е. когда пользователям не разрешено SET DEFINE OFF) и для случаев, когда пользователи хотят указать как амперсанды в тексте, так и определенные переменные в одной команде SQL.
Нечеткий анализ
4

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

Изо
источник
Амперсанд должен стоять только в конце строки, экономя половину конкатенации. select 'one&' || 'two' from dual
durette
1

Настоящий ответ - вам нужно установить escape-символ на '\': SET ESCAPE ON

Проблема могла возникнуть из-за того, что экранирование было отключено, или для escape-символа было установлено значение, отличное от '\'. Приведенный выше оператор позволит экранировать и установит для него значение '\'.


Ни один из других ранее опубликованных ответов на самом деле не отвечает на исходный вопрос. Все они обходят проблему, но не решают ее.

Ужасный головастик
источник
4
Я прочитал на Ask Tom ( asktom.oracle.com/pls/asktom/… ), что «SET ESCAPE - это sqplus'ism». Так что это был бы настоящий ответ, только если бы вопрос касался SQL * Plus.
Карл Кенингер
-1

добавьте это перед вашим запросом

set define off;
Helali
источник