Экранирующий символ Oracle SQL (для «&») - PullRequest
80 голосов
/ 16 июля 2009

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

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

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

Давай, панки, сделай мой день :) 1010 *

Ответы [ 7 ]

117 голосов
/ 20 июля 2009

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

SET DEFINE OFF

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

52 голосов
/ 27 апреля 2010

|| chr(38) ||

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

30 голосов
/ 16 июля 2009

Установить определяемый символ на что-то отличное от &

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

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

15 голосов
/ 16 июля 2009
insert into AGREGADORES_AGREGADORES (IDAGREGADOR,NOMBRE,URL)
values (2,'Netvibes',
'http://www.netvibes.com/subscribe.php?type=rss' || chr(38) || 'amp;url=');
9 голосов
/ 25 июля 2012
SELECT 'Free &' || ' Clear' FROM DUAL;
4 голосов
/ 30 июня 2011

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

1 голос
/ 01 октября 2014

Реальный ответ заключается в том, что вам нужно установить управляющий символ на '\': SET ESCAPE ON

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


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

...