0

一个问题

数据库:甲骨文

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

4

2 回答 2

0

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

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

drop table XX;
rename newtable to XX;
于 2013-10-14T12:07:53.237 回答
0

在这里讨论

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 语句,以确保它是您想要的数据类型。请记住按照原始表放回您的约束、索引、分区......以及任何内容

于 2013-10-14T12:31:47.017 回答