Oracle SQL主键卡住

rew

我遇到了一个奇怪的问题。我正在创建当前现有表的副本,并向它们添加分区。

流程如下:

  1. 重命名当前约束(不能删除它们而不删除表本身,因为稍后我将需要数据)

  2. 创建一个新的分区表,该表在结构上复制当前表。所以我有MYTABLE(原始)和PART_TABLE(新分区),包括FK

  3. 使用INSERT INTO SELECT子句复制数据

  4. 用索引和PK更改表

  5. 重命名表,所以我最终得到MYTABLE(新分区)和TRASH_TABLE(原始)

不幸的是,在第4步中,我遇到了一个错误

ALTER TABLE MYTABLE ADD CONSTRAINT "PK_MYTABLE"
    PRIMARY KEY ("MY_ID", "SEQUENCE")
    USING INDEX LOCAL TABLESPACE INDEXSPACE;

SQL错误:ORA-00955:“名称已被现有对象使用”

现在,我从逻辑上假设我只是忘记了重命名PK,所以我检查了一下TRASH_TABLE,但是看到正确重命名的PK。

我也跑了

SELECT *
FROM ALL_CONSTRAINTS
WHERE CONSTRAINT_NAME LIKE 'PK_MYTABLE'

它返回了0个结果。与表相同USER_CONSTRAINTS

重命名的PK正确显示。

我注意到的另一件事是,只有PK以这种方式锁定。添加FK或UNIQUE约束就可以了。

马库斯克

如何在Oracle中重命名主键以便可以重用那样,问题在于Oracle为主键创建了一个索引。您还需要重命名自动生成的索引。根据Tony Andrews的建议,尝试

ALTER INDEX "PK_MYTABLE" RENAME TO "PK_MYTABLE_OLD";

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章