数据库:Oracle 添加新列,但不添加新列(序列)



一个问题

数据库:甲骨文

这是stmt(描述:将类型VARCHAR更改为CLOB)

ALTER TABLE XX
 ADD (TEMP_Value CLOB);
UPDATE XX SET TEMP_Value=Value;
COMMIT;
ALTER TABLE XX DROP COLUMN Value;
ALTER TABLE XX
RENAME COLUMN TEMP_Value TO Value;

问题:新的 clob 列是 XX 表中的最后一列(通常)。如果值秒现在是最后一列,如何更改序列

我知道以下解决方案,这对于几列来说不是很聪明,所以我想找到另一种解决方案。

create newtable as
select Value, X, XX,..
drop table XX;
rename newtable to XX;

在这里讨论

Oracle 不支持在表中间添加列,仅将它们添加到末尾,这与MYSQL ALTER TABLE TABLENAME ADD COL1 AFTER COL2命令不同。数据库设计和应用功能不应依赖于数据库架构中列的顺序。毕竟,您始终可以在 select 语句中指定顺序,这是最佳实践。

SELECT * FROM TABLE不是一个好的做法。

但是,如果由于某种原因,您只需要在表中间有一个新列,则可以解决此问题。

CREATE TABLE TAB1NEW
AS
    SELECT
          0 AS COL1,
          COL1 AS COL2
    FROM
          TAB1;
DROP TABLE TAB1 PURGE;
RENAME TAB1NEW TO TAB1;

其中 SELECT 0 AS col1 是新列,然后根据需要从原始表中指定其他列。将 SELECT 0 AS col1 按所需顺序放在适当的位置。

之后,您可能希望对列运行 alter table 语句,以确保它是您想要的数据类型。记得放回你的约束、索引、分区...以及原始表格中的任何内容

最新更新