数据库:Oracle添加新列但不是最后一列(序列)?

时间:2013-10-14 11:59:13

标签: sql oracle clob

一个问题

数据库:Oracle

这是stmt(描述:chnage type VARCHAR to 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-column是XX表中的最后一列(通常)。 如果第二个值现在是最后一列,如何更改序列

2 个答案:

答案 0 :(得分:0)

我知道以下解决方案,并且对于几个列而言不是很聪明,所以我想找到另一个解决方案。

create newtable as
select Value, X, XX,..

drop table XX;
rename newtable to XX;

答案 1 :(得分:0)

讨论here

MYSQL ALTER TABLE TABLENAME ADD COL1 AFTER COL2命令不同,Oracle不支持在表的中间添加列,只将它们添加到结尾。您的数据库设计和应用程序功能不应该依赖于数据库模式中的列顺序。毕竟,您总是可以在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语句,以确保它是您想要的数据类型。记得放回你的约束,索引,分区......以及原始表中的任何内容