Проблемът е, че SQL*Plus третира целия низ след & , до следващото празно пространство или подобно, като име на променлива за заместване. Очевидно не това е, което искате тук.
За щастие те са се сетили за това и можете да обозначите края на името на променливата с . :
FROM &3._TABLE
(Поне това работи за именувани променливи и съм почти сигурен, че ще работи за позиционни... ако не, тогава ще трябва да дефинирате нова променлива, зададена на &3 като заобиколно решение).
Той е в документацията , но мигнете и ще го пропуснете:
Има свързан ефект, който може да искате да имате предвид за в бъдеще. Ако следващият знак след променливата за заместване е .код> така или иначе - между схемата и таблицата, или между таблицата и колоната, например - тогава това ще се интерпретира като терминатор на заместване. Да кажем, че подавате схемата отделно като &4 , със стойност 'scott'; това:
FROM &4.&3._TABLE
изглежда разумно, но ще бъде заменено с scottdev_TABLE , което няма да бъде разпознато. Така че в този случай трябва да имате допълнителен:
FROM &4..&3._TABLE
което ще бъде заменено като scott.dev_TABLE .