【问题标题】:Database: Oracle Add new column but not the last column (sequence)? [duplicate]数据库:Oracle 添加新列但不是最后一列(序列)? [复制]
【发布时间】:2013-10-14 11:59:13
【问题描述】:

一个问题

数据库:甲骨文

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

【问题讨论】:

  • 表中列的顺序完全不相关(LONG 列除外)。如果您按特定顺序需要它们,只需按该顺序将它们放入您的 SELECT 语句中
  • @a_horse_with_no_name +1 - 数据库表中的列顺序没有任何意义,没有必要尝试将它们按顺序排列。

标签: sql oracle clob


【解决方案1】:

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

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

drop table XX;
rename newtable to XX;

【讨论】:

    【解决方案2】:

    讨论here

    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-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      • 2019-10-21
      • 1970-01-01
      • 2015-12-12
      相关资源
      最近更新 更多