Все забравям това и се връщам към него отново! Мисля, че най-добрият отговор е комбинация от предоставените досега отговори.
Първо, &е префиксът на променливата в sqlplus/sqldeveloper, оттук и проблемът – когато се появи, се очаква да бъде част от името на променлива.
SET DEFINE OFF ще спре интерпретацията на sqlplus и по този начин.
Но какво ще стане, ако трябва да използвате sqlplus променливи и буквално и знаци?
- Трябва да ЗАДАДЕТЕ DEFINE ON, за да накарате променливите да работят
- И ЗАДАДЕТЕ 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
Ако искате да използвате различен екраниращ знак:
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 '#'