it-roy-ru.com

Как игнорировать амперсанды в сценарии SQL, запущенном из SQL Plus?

У меня есть сценарий SQL, который создает пакет с комментарием, содержащий амперсанд (&). Когда я запускаю скрипт из SQL Plus, мне предлагается ввести замещающее значение для строки, начинающейся с &. Как отключить эту функцию, чтобы SQL Plus игнорировал амперсанд?

94
JoshL

Это может работать для вас:

set define off

В противном случае амперсанд должен быть в конце строки, 

'StackOverflow &' || ' you'

Правка: Я был счастлив щелчком при сохранении ... Это ссылка на блог .

161
Austin Salonen

Если вы иногда используете переменные подстановки, вы можете не захотеть отключать определение. В этих случаях вы можете преобразовать амперсанд из его числового эквивалента, как в || Chr(38) ||, или добавить его как один символ, как в || '&' ||.

23
Leigh Riffel

Я решил с кодом ниже:

set escape on

и поместите\рядом & в левом 'value_\&_intert'

Att

11
Cauca

Вы можете установить специальный символ, который ищется при выполнении скрипта, в другое значение с помощью SET DEFINE <1_CHARACTER>

По умолчанию сама функция DEFINE включена и имеет значение &

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

SQL> select '&var_ampersand #var_hash' from dual;
Enter value for var_ampersand: a value

'AVALUE#VAR_HASH'
-----------------
a value #var_hash

SQL> set define #
SQL> r
  1* select '&var_ampersand #var_hash' from dual
Enter value for var_hash: another value

'&VAR_AMPERSANDANOTHERVALUE'
----------------------------
&var_ampersand another value

SQL>
6
tvCa

set define off <- это лучшее решение, которое я нашел

Я тоже пытался ...

установить определение} 

Мне удалось вставить несколько записей, содержащих символы амперсанда '&', но я не могу использовать символ '}' в тексте Поэтому я решил использовать «set define off», и все работает как надо.

3
ora

По словам это Ницца FAQ есть пара решений.

Вы также можете выйти из амперсанда с помощью символа обратной косой черты \, если сможете изменить комментарий.

2
user19387

У меня был оператор CASE с WHEN column = 'sometext & more text' THEN ....

Я заменил его на WHEN column = 'sometext' || CHR (38) || «больше текста», ТО ...

вы также можете использовать КОГДА столбец НРАВИТСЯ 'sometext _ more text' THEN ...

(_ это подстановочный знак для одного символа)

0
AWOLKiwi