问个ORACLE 删除主键和索引的问题

先用DROP TABLE A;把表A删除了
再用建表语句
create table GOMaterialMain (
  aa VARCHAR2(16) not null,
  bb VARCHAR2(16) not null,
  constraint PK_AA primary key (aa)
);

报 ORA-00952 name is used by an existing object

查了下应该是表A原本就有PK_AA 这个主键,删表的时候没有删除这个主键。

想删除 这个主键 用 DROP INDEX PK_AA 
又报 ORA-02429: cannot drop index used for enforcement of unique/primary key 错误

请问各位,在没有表的情况下,如何删除原表对应的主键及索引?
谢谢!

还真猜着了。其实你的数据库里有两张表,一个GOMaterialMain,一个GOMATERIALMAIN。

这里简单说一下,或者说纠正一下。其实ORACLE是大小写区分的,但是SQL是不区分大小写的。解析的时候,SQL会自动转换为全大写,因此无论建表还是访问表,始终对应的表名是全大写的表。如果想指定大小写,需要在对象名用双引号括起来,这样在解析的时候就不会对这部分进行处理,访问使用的就是你指定的。比如使用一些工具生成的表或者列,有可能这个工具会将所有的对象都使用双引号包起来,因此建立的表的名称并不见得是全部大写。这时你使用正常的SQL是访问不到的。

说白了,你这张表其实还在,只是你使用SELECT * FROM GOMaterialMain访问不到。如果想访问到,必须使用SELECT * FROM "GOMaterialMain"。表还在,主键自然也还在。

现在你这种情况,如果想删除GOMaterialMain,就得使用DROP TABLE "GOMaterialMain"才可以将这个表删除。

你先查查这个主键到底是在哪吧:
SELECT TABLE_NAME, CONSTRAINT_TYPE
FROM DBA_CONSTRAINTS
WHERE CONSTRAINT_NAME = 'PK_AA'

估计表还在回收站里面,你确认一下把。

SELECT TABLE_NAME, CONSTRAINT_TYPE
FROM DBA_CONSTRAINTS
WHERE CONSTRAINT_NAME = 'PK_AA';

这个查询的结果是什么?

是GOMaterialMain还是GOMATERIALMAIN?