'создать табличное пространство' из VARIABLE - PullRequest
2 голосов
/ 15 февраля 2012

Я хочу

CREATE TABLESPACE l_tablespace ...

где l_tablespace определяется как

VARIABLE l_tablespace VARCHAR2( 100 CHAR )
EXEC l_tablespace := 'my_tablespace';

Не CREATE TABLESPACE l_tablespace ..., ни CREATE TABLESPACE :l_tablespace ... не работает.

Ответы [ 2 ]

5 голосов
/ 15 февраля 2012

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

execute immediate 'create tablespace '||l_tablespace||'  ...';
2 голосов
/ 16 февраля 2012

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

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

DEFINE l_tablespace=my_tablespace
CREATE TABLESPACE &l_tablespace ...

Затем эту же переменную можно повторно использовать в последующих командах в том же файле, например, для создания таблиц в новом табличном пространстве.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...