Continuo a dimenticarlo e a tornarci di nuovo! Penso che la risposta migliore sia una combinazione delle risposte fornite finora.
In primo luogo, &è il prefisso della variabile in sqlplus/sqldeveloper, da qui il problema:quando appare, dovrebbe far parte del nome di una variabile.
SET DEFINE OFF interromperà l'interpretazione di sqlplus e in questo modo.
Ma cosa succede se è necessario utilizzare le variabili sqlplus e letterale e caratteri?
- Hai bisogno di SET DEFINE ON per far funzionare le variabili
- E IMPOSTA ESCAPE ON per sfuggire agli usi di &.
es.
set define on
set escape on
define myvar=/forth
select 'back\\ \& &myvar' as swing from dual;
Produce:
old 1: select 'back\\ \& &myvar' from dual
new 1: select 'back\ & /forth' from dual
SWING
--------------
back\ & /forth
Se vuoi usare un carattere di escape diverso:
set define on
set escape '#'
define myvar=/forth
select 'back\ #& &myvar' as swing from dual;
Quando si imposta un carattere di escape specifico, è possibile che venga visualizzato "SP2-0272:il carattere di escape non può essere alfanumerico o vuoto". Questo probabilmente significa che hai già definito il carattere di fuga e le cose diventano orribilmente autoreferenziali. Il modo più semplice per evitare questo problema è avviare prima la fuga:
set escape off
set escape '#'