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