Евакуаційний символ 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='
);

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

Відповіді:


124

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

ВСТАНОВИТИ ВИЗНАЧЕННЯ ВИМК

тоді вам не доведеться турбуватися про втечу або CHR (38).


59

|| chr(38) ||

Це рішення ідеально підходить.


2
Це робить роботу, але трохи незграбний при роботі з вже існуючими рядками.
aglassman

Для мене SET DEFINE OFF не спрацювало. Ваше рішення спрацювало буде. Дякую ...
Ашок кумар,

31

Встановіть для символу визначення щось інше, ніж &

ВСТАНОВИТИ ВИЗНАЧИТИ ~
створити таблицю blah (x varchar (20));
вставити в значення blah (x) ('blah & amp');
вибрати * з бла;

X                    
-------------------- 
бла і підсилювач 


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

Це набагато краще загальне рішення, яке не залежить від привілеїв користувача (тобто, коли користувачам заборонено ВСТАНОВЛЯТИ ВИЗНАЧЕННЯ), а також коли користувачі хочуть вказати як амперсанди в тексті, так і визначені змінні в тій самій команді SQL.
Нечіткий аналіз


4

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


Амперсанд повинен бути лише в кінці рядка, зберігаючи половину конкатенації. select 'one&' || 'two' from dual
дюрета

1

Дійсна відповідь полягає в тому, що вам потрібно встановити вхідний символ на '\': ВСТАНОВИТИ ВТІЧ

Проблема могла виникнути або через те, що втечу було вимкнено, або для символу втечі встановлено щось інше, ніж '\'. Наведений вище оператор дозволить екранування та встановить його на '\'.


Жодна з інших раніше опублікованих відповідей насправді не відповідає на вихідне запитання. Усі вони вирішують проблему, але не вирішують її.


4
Я читав у Ask Tom ( asktom.oracle.com/pls/asktom/… ), що "SET ESCAPE - це sqplus'ism". Отже, це була б реальна відповідь, якби питання стосувалося SQL * Plus.
Karl Kieninger

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.