oracle - Oracle 更改表删除约束删除索引在语法上是否有效?

标签 oracle syntax oracle11g alter-table

我有 Oracle 11.2.0.2.0 和一个由以下脚本创建的具有唯一约束的表:

    create table foo (id varchar(26) not null, name varchar(50) not null);
    alter table foo add constraint pk_foo primary key (id);
    /**/
    alter table foo add constraint un_foo unique (name); 

我需要删除唯一约束,这很容易:
    alter table foo drop constraint un_foo;

问题是:在SQL Developer中备份数据库然后恢复时,会出现un_foo唯一索引由位于 /**/ 的显式命令创建线:
    CREATE UNIQUE INDEX un_foo ON foo (name);

上面的alter 命令不会删除这种显式创建的索引。我意识到以下命令有效:
    alter table foo drop constraint un_foo drop index;

对于主键,类似命令 alter table foo drop primary key drop indexdocumentation或在 Oracle Developer Community discussion .另外,this answer at AskTom也使用此语法(对于 keep index )。但是,我在 alter table 的铁路图中看不到这种语法的任何推理。命令。

问题:是语法 alter table foo drop constraint un_foo drop index合法的?如果是这样,基于铁路图中的哪些文件或流程?如果没有,为什么命令不会失败?

谢谢!

最佳答案

根据@Chris Saxonmy equivalent question posted to AskTom 的回答,语法被确认为有效但不存在于文档中。
是文档错误还是意外副作用的决定仍未解决。

我个人决定依赖语法,因为除其他外,My Oracle Support 中也建议这样做。

如果需要绝对安全(阅读:符合文档),唯一的可能是使用声明 alter table foo drop unique (name) drop index; .

我在 blogpost 中总结了围绕这个问题的(不是很重要的)情况。 (捷克语)。

关于oracle - Oracle 更改表删除约束删除索引在语法上是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47232317/

相关文章:

sql - 如何在 Select 上替换 Varchar2 中的特定字符

sql - oracle sql查询列出上个月的所有日期

C# 多行字符串与 html

oracle - 设置 Oracle 11g session 超时

oracle - 如何从嵌套表中选择列值

oracle - 无法从SQL(Oracle)压缩数据

sql - 在oracle中使用时间戳比较两个日期

MATLAB 除最后一个元素外的所有内容

java - Java 中更好的等待语法

linux - 将 Oracle DATE 转换为 Linux 时间