我想重命名表列,但是它是一个索引,因此出现错误。我该如何解决这个问题?
ALTER TABLE <name> RENAME column <id> TO <newid>;
Error: SQL0478N DROP, ALTER, TRANSFER OWNERSHIP...
答案 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