Экранирующий символ Oracle SQL (для символа «&»)

70

При попытке выполнить инструкции SQL-вставки с помощью Oracle SQL Developer я продолжаю генерировать приглашение "Enter substitution value":

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

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

Идем дальше, панк, сделай мой день:)

Теги:
oracle-sqldeveloper
escaping

7 ответов

98
Лучший ответ

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

SET DEFINE OFF

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

49

|| chr(38) ||

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

  • 2
    Это делает работу, но немного неуклюже при работе с уже существующими строками.
  • 0
    Далеко не идеально
26

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

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

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

  • 26
    или SET DEFINE OFF
14
insert into AGREGADORES_AGREGADORES (IDAGREGADOR,NOMBRE,URL)
values (2,'Netvibes',
'http://www.netvibes.com/subscribe.php?type=rss' || chr(38) || 'amp;url=');
  • 0
    Спасибо Джеффри Кемпу за предоставление решения с || chr (38) ||
  • 0
    Это гораздо лучшее общее решение, которое не зависит от привилегий пользователя (т. Е. Когда пользователям не разрешено устанавливать DEFINE OFF) и когда пользователи хотят указывать как амперсанды в тексте, так и определенные переменные в одной и той же команде SQL.
8
SELECT 'Free &' || ' Clear' FROM DUAL;
3

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

  • 0
    Правильно и точно!
1

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

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


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

  • 4
    Я прочитал в «Спроси Тома» ( asktom.oracle.com/pls/asktom/… ), что «SET ESCAPE - это sqplus'ism». Так что это был бы реальный ответ, только если бы вопрос был о SQL * Plus.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню