Eu continuo esquecendo isso e voltando a ele novamente! Acho que a melhor resposta é uma combinação das respostas fornecidas até agora.
Em primeiro lugar, &é o prefixo da variável no sqlplus/sqldeveloper, daí o problema - quando aparece, espera-se que faça parte de um nome de variável.
SET DEFINE OFF irá parar a interpretação do sqlplus &desta forma.
Mas e se você precisar usar variáveis sqlplus e literal e caracteres?
- Você precisa de SET DEFINE ON para fazer as variáveis funcionarem
- E SET ESCAPE ON para escapar dos usos de &.
por exemplo.
set define on
set escape on
define myvar=/forth
select 'back\\ \& &myvar' as swing from dual;
Produz:
old 1: select 'back\\ \& &myvar' from dual
new 1: select 'back\ & /forth' from dual
SWING
--------------
back\ & /forth
Se você quiser usar um caractere de escape diferente:
set define on
set escape '#'
define myvar=/forth
select 'back\ #& &myvar' as swing from dual;
Ao definir um caractere de escape específico, você pode ver 'SP2-0272:o caractere de escape não pode ser alfanumérico ou espaço em branco'. Isso provavelmente significa que você já tem o caractere de escape definido e as coisas ficam horrivelmente auto-referenciais. A maneira limpa de evitar esse problema é ativar o escape primeiro:
set escape off
set escape '#'