Я продолжаю забывать об этом и возвращаюсь к нему снова! Я думаю, что лучший ответ - это комбинация предоставленных ответов.
Во-первых, & является префиксом переменной в sqlplus / sqldeveloper, поэтому проблема заключается в том, что когда он появится, ожидается, что он будет частью имени переменной.
SET DEFINE OFF остановит интерпретацию sqlplus и так далее.
Но что, если вам нужно использовать переменные sqlplus и литерал & символы?
- Вам нужно установить SET DEFINE ON, чтобы переменные работали
- И SET ESCAPE ON, чтобы избежать использования &.
, например
set define on
set escape on
define myvar=/forth
select 'back\\ \& &myvar' as swing from dual;
Производит:
old 1: select 'back\\ \& &myvar' from dual
new 1: select 'back\ & /forth' from dual
SWING
--------------
back\ & /forth
Если вы хотите использовать другой escape-символ:
set define on
set escape '#'
define myvar=/forth
select 'back\ #& &myvar' as swing from dual;
Когда вы устанавливаете определенный escape-символ, вы можете увидеть «SP2-0272: escape-символ не может быть буквенно-цифровым или пробелом». Это, вероятно, означает, что вы уже определили escape-символ, и все становится ужасно самоссылочным. Чистый способ избежать этой проблемы - сначала запустить escape:
set escape off
set escape '#'