O problema é que o SQL*Plus está tratando a string inteira após o
&
, até o próximo espaço em branco ou simlar, como o nome da variável de substituição. Claramente não é isso que você quer aqui. Felizmente eles pensaram nisso, e você pode denotar o final do nome da variável com um
.
:FROM &3._TABLE
(Pelo menos, isso funciona para variáveis nomeadas, e tenho quase certeza de que funcionará para as posicionais ... se não, você precisará definir uma nova variável definida como
&3
como solução). Está na na documentação , mas pisque e você perderá:
Há um efeito relacionado que você pode querer ter em mente para o futuro. Se o próximo caractere após a variável de substituição for um
.
de qualquer forma - entre o esquema e a tabela, ou entre a tabela e a coluna, por exemplo - então isso será interpretado como o terminador de substituição. Digamos que você estivesse passando o esquema separadamente como &4
, com valor 'scott'
; isto:FROM &4.&3._TABLE
parece razoável, mas seria substituído por
scottdev_TABLE
, que não será reconhecido. Então, nesse caso, você precisa ter um extra:FROM &4..&3._TABLE
que seria substituído por
scott.dev_TABLE
.