gpt4 book ai didi

sql - Oracle SQL 主键卡住

转载 作者:行者123 更新时间:2023-12-04 20:36:41 24 4
gpt4 key购买 nike

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

过程如下:

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

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

  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 Error: ORA-00955: "name is already used by an existing object"

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

我也跑了

SELECT *
FROM ALL_CONSTRAINTS
WHERE CONSTRAINT_NAME LIKE 'PK_MYTABLE'

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

重命名的 PK 正确显示。

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

最佳答案

How to rename a primary key in Oracle such that it can be reused 中所述,问题是 Oracle 为主键创建了索引。您还需要重命名自动生成的索引。作为suggested by Tony Andrews , 尝试

ALTER INDEX "PK_MYTABLE" RENAME TO "PK_MYTABLE_OLD";

关于sql - Oracle SQL 主键卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45567181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com