2014-03-25 33 views
0

我有一个表TABLE1主键PK1。需要添加一列到现有的主键。 我绑下面的ALTER脚本无法将新列添加到现有主键

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. 

我如何能多一个列添加到主键,在不影响数据(数据已经证实,没有重复。)

+1

[更改主键甲骨文(可能重复http://stackoverflow.com/questions/2310561/change-primary-关键的Oracle) – Noel

回答

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]; 
0

您需要首先丢弃旧的主键。