Chr*_*ark 3 sql oracle oracle11g
假设我有这个表:

我想要发生的是将列id移动/更改STATUS_DT为10并向下调整其余部分,如下所示:
Column Name | ID
...
STAT_ID | 10
STATUS_DT | 10
CREA_BY | 11
CREA_DT | 12
LAST_UPD_BY | 13
LAST_UPD_DT | 14
Run Code Online (Sandbox Code Playgroud)
是否有一个查询(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
Run Code Online (Sandbox Code Playgroud)
然后步骤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
Run Code Online (Sandbox Code Playgroud)
步骤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
Run Code Online (Sandbox Code Playgroud)
步骤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;
Run Code Online (Sandbox Code Playgroud)
步骤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
Run Code Online (Sandbox Code Playgroud)
如果数据不相关,则可以跳过步骤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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11851 次 |
| 最近记录: |