来自VARIABLE的'create tablespace'

时间:2012-02-15 17:44:28

标签: sql oracle

我想

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 个答案:

答案 0 :(得分:5)

您可以使用execute immediate

执行此操作
execute immediate 'create tablespace '||l_tablespace||'  ...';

答案 1 :(得分:2)

您无法在DDL中使用绑定变量,即使在动态SQL中也是如此,这就是为什么您的第二次尝试不起作用以及为什么必须使用@bunting显示的连接。 (通常有助于显示您所获得的错误,而不仅仅是“无法正常工作”。

如果您从SQL * Plus运行脚本并希望能够在运行时指定表空间,则可以define a substitution variable代替:

DEFINE l_tablespace=my_tablespace
CREATE TABLESPACE &l_tablespace ...

然后可以在同一文件中的子序列命令中重用相同的变量,例如在新的表空间中创建表。

您还可以使用ACCEPT从运行脚本的用户处获取值。或者使用从命令行传递的位置参数(&1等),尽管我在这里不太习惯。

(不确定ACCEPT是否适用于SQL Developer,但我认为其余的都可以。)