无法将新列添加到现有主键

时间:2014-03-25 06:29:44

标签: oracle

表TABLE1有一个主键PK1。需要在现有主键上再添加一列。 我正在绑定以下更改脚本

ALTER TABLE TABLE1
ADD CONSTRAINT "PRIMARYKEYS" PRIMARY KEY
("PK1",
"PK2");

Error report:
SQL Error: ORA-02260: table can have only one primary key
02260. 00000 -  "table can have only one primary key"
*Cause:    Self-evident.
*Action:   Remove the extra primary key.

如何在不影响数据的情况下向主键添加一列(数据已经过验证,没有重复。)

2 个答案:

答案 0 :(得分:2)

如果您担心违反PK的新数据可以在旧PK丢弃的时间间隔内添加,但未创建新数据,则可以先创建唯一索引:

CREATE UNIQUE INDEX IDXU_TABLE1_PK ON TABLE1(PK1,PK2);
ALTER TABLE TABLE1 DROP CONSTRAINT [old_pk_constraint_name] ;
ALTER TABLE TABLE1 ADD CONSTRAINT "PRIMARYKEYS" PRIMARY KEY
   (PK1,PK2) USING INDEX IDXU_TABLE1_PK;

另一个选择是保持索引与旧的PK约束相关联,直到创建新的PK:

ALTER TABLE TABLE1 DROP CONSTRAINT [old_pk_constraint_name] KEEP INDEX;
ALTER TABLE TABLE1 ADD CONSTRAINT "PRIMARYKEYS" PRIMARY KEY
   (PK1,PK2) ;
DROP INDEX [name of unique index associated with the old PK constraint];

答案 1 :(得分:0)

您需要先删除旧的主键。