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

StackOverflow https://stackoverflow.com/questions/118190

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

set define off

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

'StackOverflow &' || ' you'

Редактировать:Я был доволен кликом при сохранении...На это была ссылка из Блог.

Другие советы

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

Я решил проблему с помощью приведенного ниже кода:

set escape on

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

Att

Вы можете присвоить специальному символу, который ищется при выполнении скрипта, другое значение с помощью 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>

установить определение выключенным <- Это лучшее решение, которое я нашел

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

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

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

Согласно этот приятный FAQ есть пара решений.

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

Тогда у меня был оператор CASE с WHEN column = 'sometext & more text' ....

Я заменил его на ТОГДА column = 'sometext ' || CHR(38) || 'еще текст' ...

вы также могли бы использовать КОГДА столбец ТИПА "sometext _ more text", ТО ...

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top