Вы не можете использовать переменные связывания в DDL, даже в динамическом SQL, поэтому ваша вторая попытка не работает и почему вы должны использовать конкатенацию, как @bunting показал. (Обычно полезно показать полученную вами ошибку, а не просто «не работает»).
Если вы используете скрипт из SQL * Plus и хотите, чтобы иметь возможность указать табличное во время выполнения, вы можете define a substitution variable вместо:
DEFINE l_tablespace=my_tablespace
CREATE TABLESPACE &l_tablespace ...
та же переменная может затем быть повторно использованы в subsequant команды в том же файле, например создание таблиц в вашем новом табличном пространстве.
Вы также можете получить значение от пользователя, выполняющего скрипт, с помощью ACCEPT
. Или используйте позиционный параметр, переданный из командной строки (&1
и т. Д.), Хотя мне было бы не так удобно с этим.
(Не уверен, что ACCEPT
работает в SQL Developer, но я думаю, что остальное делает).
Да, именно так я справился с этим в своем предыдущем проекте. Но для меня это не похоже. Не нравится вообще. –