gpt4 book ai didi

database - 在保留现有触发器的同时重命名表

转载 作者:搜寻专家 更新时间:2023-10-30 19:41:32 26 4
gpt4 key购买 nike

决定将几个现有表连接到一个集群中。

这显然意味着需要重新创建表以便将它们聚集在一起,但是应保留现有数据。

自然地,我假设该过程将遵循以下原则:

  • 以不同的名称备份现有表(通过重命名或其他方式)
  • 以旧名称创建新的聚簇表
  • 将备份表中的所有数据复制到新创建的表中

然而,当前表有相当多的触发器分配给它(如果我在这里错了请纠正我但是)当我对该表执行重命名操作时,我假设所有触发器都按方便顺序分配给它将重构自己以匹配新名称。

在这种情况下,完美的场景可能是触发器在表被重命名后暂时从表中“分离”出来(仍然指向那时不存在的旧表名),然后将是一次当新创建的聚簇表出现时再次起作用。

但是我不确定这是否可能。

那么这里的问题是:重命名表时是否可以留下触发器,还是应该手动处理它们?

最佳答案

是的,您是对的:当您重命名表时,其关联的触发器仍将引用同一个表。 (注意触发器名称本身不会被重命名)。

我遇到了这个问题,所以我编写了一个脚本,利用 DMBS_METADATA.GET_DDL 提取表的触发器代码。过程是:

对于每个表 T:

  1. 对于每个触发器、约束、检查约束、非pk索引T 使用 DMBS_METADATA.GET_DDL 提取到 DDL
  2. 将表 T 重命名为 OLD_TABLE_NAME
  3. 创建新表(如果要迁移,可以使用 CTAS数据)
  4. 从中删除(或重命名)所有触发器、约束、索引OLD_TABLE_NAME
  5. 运行提取的 DDL 以在新的上重新创建触发器、约束和索引表

关于database - 在保留现有触发器的同时重命名表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20264565/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com