oracle - 如何重命名 Oracle 中的表,以便更新所有外键、约束、触发器和序列并保留任何现有数据?

标签 oracle rename preserve

我需要在 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/

相关文章:

sql-server - 开源数据库代理?

database - 为什么 DDL 命令是 AutoCommit?

PHP 文件重命名

git - 为什么 `git rebase -p` 不保留冲突解决方案?

linux - 连接 PDF,同时保留列表中的排名

.net - 与oracle对话时应用程序崩溃,除非可执行文件路径包含空格

javascript - Node.js退出时如何释放Oracle数据库连接

python - 如何更正文件扩展名?

Powershell 异常 : Not enough quota is available to process this command

mysql - 完成数据或左表,然后加入连接