gpt4 book ai didi

sql - 移动 oracle 列 ID

转载 作者:行者123 更新时间:2023-12-04 22:40:25 25 4
gpt4 key购买 nike

假设我有这个表:

enter image description here

我想要发生的是移动/更改 STATUS_DT 的列 ID到 10 并像这样向下调整其余部分:

Column Name | ID

...

STAT_ID | 10
STATUS_DT | 10
CREA_BY | 11
CREA_DT | 12
LAST_UPD_BY | 13
LAST_UPD_DT | 14

是否有一个查询( ALTER TABLE )以便我可以在不重新创建表的情况下实现这一点?

最佳答案

理论上,你可以

  • 重命名要移动的列
  • 将新列添加到列列表的末尾
  • 将数据从旧列复制到新列
  • 删除旧列

  • 在实践中,我会重命名旧表并使用新的列顺序重新创建它。如果需要,通过在线重组...

    编辑:例如:
    01 INVOICE_REQUEST_ID
    ...
    09 STAT_ID
    10 CREA_BY
    11 CREA_DT
    12 LAST_UPD_BY
    13 LAST_UPD_DT
    14 STATUS_DT

    然后步骤 1) 重命名要移动的列:
    ALTER TABLE my_table RENAME COLUMN crea_by     TO tmp_crea_by;
    ALTER TABLE my_table RENAME COLUMN crea_dt TO tmp_crea_dt;
    ALTER TABLE my_table RENAME COLUMN last_upd_by TO tmp_last_upd_by;
    ALTER TABLE my_table RENAME COLUMN last_upd_dt TO tmp_last_upd_dt;

    01 INVOICE_REQUEST_ID
    ...
    09 STAT_ID
    10 TMP_CREA_BY
    11 TMP_CREA_DT
    12 TMP_LAST_UPD_BY
    13 TMP_LAST_UPD_DT
    14 STATUS_DT

    步骤 2) 将列添加到列列表的末尾:
    ALTER TABLE my_table RENAME COLUMN crea_by     TO tmp_crea_by;
    ALTER TABLE my_table RENAME COLUMN crea_dt TO tmp_crea_dt;
    ALTER TABLE my_table RENAME COLUMN last_upd_by TO tmp_last_upd_by;
    ALTER TABLE my_table RENAME COLUMN last_upd_dt TO tmp_last_upd_dt;

    01 INVOICE_REQUEST_ID
    ...
    09 STAT_ID
    10 TMP_CREA_BY
    11 TMP_CREA_DT
    12 TMP_LAST_UPD_BY
    13 TMP_LAST_UPD_DT
    14 STATUS_DT
    15 CREA_BY
    16 CREA_DT
    17 LAST_UPD_BY
    18 LAST_UPD_DT

    步骤 3) 将数据从旧列复制到新列:
    UPDATE my_table 
    SET tmp_crea_by = crea_by,
    tmp_crea_dt = crea_dt,
    tmp_last_upd_by = last_upd_by,
    tmp_last_upd_dt = last_upd_dt;

    步骤 4) 删除旧列:
    ALTER TABLE my_table SET UNUSED (tmp_crea_by, tmp_crea_dt, tmp_last_upd_by, tmp_last_upd_dt);
    ALTER TABLE my_table DROP UNUSED COLUMNS;

    01 INVOICE_REQUEST_ID
    ...
    09 STAT_ID
    10 STATUS_DT
    11 CREA_BY
    12 CREA_DT
    13 LAST_UPD_BY
    14 LAST_UPD_DT

    如果数据不相关,您可以跳过步骤 1) 重命名和步骤 3) 复制。该脚本如下所示:
    ALTER TABLE my_table SET UNUSED (crea_by, crea_dt, last_upd_by, last_upd_dt);
    ALTER TABLE my_table ADD (crea_by VARCHAR2(30));
    ALTER TABLE my_table ADD (crea_dt DATE);
    ALTER TABLE my_table ADD (last_upd_by VARCHAR2(30));
    ALTER TABLE my_table ADD (last_upd_dt DATE);
    ALTER TABLE my_table DROP UNUSED COLUMNS;

    关于sql - 移动 oracle 列 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17230039/

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