我需要修改现有的PK。因此我放弃重新创建它。
ALTER TABLE B DROP CONSTRAINT PK_B;
ALTER TABLE B ADD CONSTRAINT PK_B PRIMARY KEY ("TYP", "NR", "HH", "QUART");
不幸的是,最后一个声明会给我一个错误ORA-00955
如果我创建PK约束,就像它最初定义的那样:
ALTER TABLE B ADD CONSTRAINT PK_B PRIMARY KEY ("TYP", "NR", "HH");
一切正常。
答案 0 :(得分:15)
也许INDEX
与PRIMARY KEY CONSTRAINT
相关联,并且它也被命名为PK_B
。
您可以将其检查为:
SELECT * FROM USER_INDEXES WHERE TABLE_NAME='<table_name>';
如果那是真的,那么就做:
ALTER INDEX "PK_B" RENAME TO "PK_XYZ";
更新:关于ALTER INDEX
声明,Justin在评论中提到的几点重要
Oracle隐式创建UNIQUE
索引以支持PRIMARY KEY CONSTRAINT
。因为,索引与主键的名称相同,并且现在主键正在被修改,所以 更好 可以删除并重新创建索引再次按照旧主键的定义。
我的结论:
答案 1 :(得分:0)
我遇到了同样的问题,我必须执行以下操作,从头开始重新创建数据库,从视图中删除对表的引用。我首先在表和索引中搜索相同的内容。
connect sys/oracle as sysdba;
select * from all_tables
select * from all_indexes
(finally located the reference in the views)
select * from all_views where view_name like '%WKSTSTATE%';
drop view RUEGEN.WKSTSTATE;