2012-02-15 4 views

ответ

5

Вы можете сделать это с execute immediate

execute immediate 'create tablespace '||l_tablespace||' ...'; 
+0

Да, именно так я справился с этим в своем предыдущем проекте. Но для меня это не похоже. Не нравится вообще. –

2

Вы не можете использовать переменные связывания в DDL, даже в динамическом SQL, поэтому ваша вторая попытка не работает и почему вы должны использовать конкатенацию, как @bunting показал. (Обычно полезно показать полученную вами ошибку, а не просто «не работает»).

Если вы используете скрипт из SQL * Plus и хотите, чтобы иметь возможность указать табличное во время выполнения, вы можете define a substitution variable вместо:

DEFINE l_tablespace=my_tablespace 
CREATE TABLESPACE &l_tablespace ... 

та же переменная может затем быть повторно использованы в subsequant команды в том же файле, например создание таблиц в вашем новом табличном пространстве.

Вы также можете получить значение от пользователя, выполняющего скрипт, с помощью ACCEPT. Или используйте позиционный параметр, переданный из командной строки (&1 и т. Д.), Хотя мне было бы не так удобно с этим.

(Не уверен, что ACCEPT работает в SQL Developer, но я думаю, что остальное делает).

Смежные вопросы