2012-07-31 61 views
1

我对SQL比较陌生,只有在需要时才会涉足它。我已经做了一些研究,但成功有限。我需要从代码中删除表空间引用。数据库中的设置已经存在于默认表空间中。顺便说一下,它是一个Oracle数据库。从数据库脚本中删除表空间引用

如果我有几行代码:

EXECUTE IMMEDIATE 'CREATE TABLE RAND_CATEGORY(
-------- insert random vars --------------- 
CONSTRAINT RAND_CATEGORY PRIMARY KEY(cat_id,ver_num) 
USING INDEX TABLESPACE VG_NDX ENABLE 
)TABLESPACE VG_DATA'; 

这是我到目前为止有:

EXECUTE IMMEDIATE 'CREATE TABLE RAND_CATEGORY(
-------- insert random vars --------------- 
CONSTRAINT RAND_CATEGORY PRIMARY KEY(cat_id,ver_num) 
USING INDEX TABLESPACE VG_NDX ENABLE 
)'; 

我的问题是,我应该删除整条生产线:

USING INDEX TABLESPACE VG_NDX ENABLE 

或者我应该删除“TABLESPACE VG_NDX”并将其保留为:

USING INDEX ENABLE 

请记住,我是新手,我只是需要帮助。过去两周我一直在学习SQL,表空间对我来说有点时髦。提前致谢! :D

回答

0

USING INDEX子句允许更多地控制约束关联索引创建,请参阅http://docs.oracle.com/cd/B28359_01/server.111/b28310/indexes003.htm。 在你的情况下,TABLESPACE存储条款。

如果您想让Oracle使用默认的表空间,您可以完全删除USING INDEX子句,并保留ENABLE

尽管在CREATE TABLE中主键约束关联索引自动启用(除非我遗漏了某些内容),所以我看不到任何保留ENABLE的点。

+0

谢谢!我最终问了我们的DBA,他说要把所有东西都拿出来,但是留下ENABLE。我不确定原因。可能它已经默认启用了,但也许他们只是想让程序员更容易理解正在发生的事情。我不确定推理。 所以我改变了 使用INDEX TABLESPACE VG_NDX ENABLE '到 ENABLE – minhaz1 2012-07-31 20:54:01

+0

'ENABLE'不是'USING INDEX'的一部分。 'ENABLE'和'USING INDEX'都是'constraint_state'的一部分,显示在http://docs.oracle.com/cd/E11882_01/server.112/e26088/clauses002.htm#CJADJGEC。查看'constraint_state'的铁路图,可以看到约束的'ENABLE'选项是独立的。 'using_index_clause'允许定制由约束创建或使用的索引。 http://docs.oracle.com/cd/E11882_01/server.112/e26088/clauses002.htm#CJAGEBIG – 2012-07-31 22:50:52

+0

@ minhaz1:你不应该接受不正确的答案〜 @ShannonSeverance:感谢您的纠正,尽管我仍然没有看到保持'ENABLE'的意义。我在文档中找不到它,但是测试它清楚地表明,在CREATE TABLE语句中声明一个'PRIMARY KEY CONSTRAINT'可以在默认情况下启用它。不管它是数据库设置,还是它是固定的,无论如何,为什么在这种情况下指定'ENABLE'? – Paciv 2012-08-01 10:29:49