【问题标题】:SELECT INTO the same tableSELECT INTO 同一张表
【发布时间】:2010-01-19 05:56:41
【问题描述】:

我有一个要重命名列的要求。在这种情况下,它应该像这样发生:

1.) 我需要使用现有的列结构创建一个新列。 2.) 将数据迁移到新列。 3.) 保留旧列。

我没有新的列结构,我必须从旧列中获取它。

TIA。

【问题讨论】:

  • 你确定你的意思是保留旧列而不是删除?
  • 不应该是'我需要用现有的列结构创建一个新的'吗?
  • 我需要保留旧列。否则它很简单。
  • @blog:如果您保留旧列,您的数据库将不再处于正常形式。

标签: sql oracle select


【解决方案1】:

您无需选择同一个表格。执行以下步骤:

  1. 将新列创建为可为空。
  2. 使用更新语句根据旧列中的值将数据填充到新列中。
  3. 如果合适,添加一个不可为空的约束。
  4. 更新所有查询和代码以使用新列而不是旧列中的值。
  5. 删除旧列。

【讨论】:

  • 这绝对是我要走的路。
  • 4.) 如何将旧的列结构和约束添加到新的?
  • @blog:按照我建议的方式,你不需要一个新表,所以除了我上面描述的步骤之外你不需要任何东西。
【解决方案2】:

什么版本的甲骨文?您可以从 9i R2 开始重命名该列:

ALTER TABLE your_table
RENAME COLUMN old_name to new_name;

如果您准备重新创建表格以便使用SELECT INTO,那么您需要使用以下步骤:

  1. 删除与表相关的约束
  2. 删除与表相关的索引
  3. 锁定原表:

    LOCK TABLE old_table IN EXCLUSIVE MODE;
    
  4. 重命名表格:

    RENAME old_table TO old_table_orig
    
  5. 使用正确/更新的列创建新表

  6. 运行SELECT INTO 脚本来填充新表,如果有任何数据类型更改,则处理
  7. 添加索引
  8. 添加约束
  9. 删除 old_table_orig

【讨论】:

  • @blog:为什么不能重命名列?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 2022-01-10
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
  • 2015-08-15
  • 1970-01-01
相关资源
最近更新 更多