我需要在 Oracle 中重命名一个表,但我想确保引用该表的任何外键、约束、触发器和序列都更新为使用新名称。
我如何确定我没有破坏任何东西?
请注意,我想保留表中包含的任何现有数据。
最佳答案
如果你
ALTER TABLE old_table_name
RENAME TO new_table_name;
所有现有的约束(外键和其他约束)和触发器都将引用新重命名的对象。序列与表没有关系,因此不会对序列产生影响(尽管如果您的意思是在表的触发器中引用序列,则触发器将在重命名后继续引用相同的序列)。但是,您编写的任何引用旧表名的存储过程都需要更新以引用新表名。
现在,虽然约束和触发器将继续正常工作,但它们将保留其原始名称。如果您希望在表名之后保留这些对象的命名约定,则需要做更多的工作。例如,如果您想要在表
FOO
上插入触发器之前的行级待命名 TRG_BI_FOO
然后将表重命名为 BAR
,您需要显式更改触发器以更改其名称ALTER TRIGGER trg_bi_foo
RENAME TO trg_bi_bar;
同样,您需要重命名约束和索引
ALTER TABLE bar
RENAME CONSTRAINT pk_foo TO pk_bar;
关于oracle - 如何重命名 Oracle 中的表,以便更新所有外键、约束、触发器和序列并保留任何现有数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9279492/