Как игнорировать амперсанды в сценарии SQL, запущенном из SQL Plus? - PullRequest
97 голосов
/ 23 сентября 2008

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

Ответы [ 7 ]

166 голосов
/ 23 сентября 2008

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

set define off

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

'StackOverflow &' || ' you'

РЕДАКТИРОВАТЬ: я был счастлив, когда сохраняю ... Это ссылка на блог 1008 *.

23 голосов
/ 09 декабря 2010

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

11 голосов
/ 22 ноября 2012

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

set escape on

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

Att

6 голосов
/ 07 декабря 2014

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

set define off <- Это лучшее решение, которое я нашел </p>

Я тоже пробовал ...

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

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

2 голосов
/ 23 сентября 2008

Согласно этому хорошему FAQ есть пара решений.

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

0 голосов
/ 10 июля 2018

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

Я заменил его на КОГДА столбец = 'sometext' || CHR (38) || 'больше текста' ТОГДА ...

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

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

...