如何重命名作为索引的列?

时间:2019-03-05 12:58:53

标签: sql db2

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

您可以选择手动执行依赖项管理,或使用存储过程为您执行依赖管理。

如果要手动执行此操作,则必须找到依赖对象,将其删除,重命名列,然后重新创建依赖关系。可以有其他依赖对象,而不仅仅是索引,例如包。如果您的Db2服务器在Linux / Unix / Windows上运行,则可以使用存储过程DBMS_UTILITY.GET_DEPENDENCY,也可以手动查询目录。这取决于什么对您来说更容易。

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

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

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

答案 1 :(得分:0)

解决方案:

drop index
alter table
create index