首页 > 解决方案 > 如何重命名作为索引的列?

问题描述

我想重命名一个表列,但它是一个索引,因此出现错误。我该如何解决这个问题?

ALTER TABLE <name> RENAME column <id> TO <newid>;

Error: SQL0478N DROP, ALTER, TRANSFER OWNERSHIP...

标签: sqldb2

解决方案


在 shell 命令行中,您可以使用db2 "? SQL0478N" | more 来查看错误的详细信息和一些建议。

该错误告诉您要更改的对象具有依赖对象,因此在您处理依赖关系之前,您无法完成更改操作。

您可以选择手动进行依赖管理,也可以使用存储过程为您完成。

如果你想手动完成,你必须找到依赖对象,删除它们,重命名列,然后重新创建依赖关系。可以有其他依赖对象,而不仅仅是一个索引,比如包。如果您的 Db2 服务器在 Linux/Unix/Windows 上运行,您可以使用存储过程DBMS_UTILITY.GET_DEPENDENCY,或者您可以手动查询目录。这取决于什么对你来说更容易。

重新创建依赖关系可能是侵入性的,如果存在引用相关索引的静态 SQL 对象,则需要重新绑定它们。对于生产用途,这可能涉及服务中断,您希望避免这种情况。

因此,您必须确定列的重命名是必不可少的。有时您可以创建一个视图,在视图中重命名相关列,但基表保持不变。

如果您想尝试自动化,并且如果您的 Db2 服务器在 Linux/Unix/Windows 上运行,那么您可以使用存储过程SYSPROC.ALTOBJ - 但是有一个学习曲线,这并不适合所有模式演变。


推荐阅读