【发布时间】:2012-04-12 07:55:52
【问题描述】:
我需要更改 200 多个表中的列类型,我正在遵循下一个方法:
- 如果列被任何 FK 引用,则禁用所有外部约束
- 将列存储在 varray 中,如果列是 PK 的一部分,则删除主键
- 在表中创建一个具有相同类型的临时新列
- 使用原始值更新临时新列
- 从原始列中删除值
- 更改原始列的列类型
- 使用临时列值更新原始列
- 如果应用则恢复主键
- 启用 FK(如果已应用)
我在以下情况下遇到了一些问题
。当主键是复合时(多列) .我需要存储原始 FK 和 PK 签名,以便在更改后恢复它们
-------我的想法--------
备份临时表中的 all_constraints 和 all_cons_columns 记录,并在更改列类型后恢复约束信息。
保持相同的想法,即存储 FK 和 PK 签名以在更改列类型后恢复它们
¿ 有什么建议吗?会很高兴的,谢谢!
【问题讨论】:
-
正在更改的列的“旧”和“新”数据类型是什么?
-
旧类型为 NUMBER(10) 新类型为 VARCHAR2(10)
-
您可能想看看 DBMS_REDEFINITION 包(我相信它自 9i 以来一直是 Oracle 的标准部分),它可能会帮助您解决所有这些问题。
标签: oracle foreign-keys primary-key constraints