在Oracle中,是否可以将列"插入"表中?

lar*_*311 9 database oracle

将列添加到现有表时,Oracle始终将列放在表的末尾.是否有可能告诉Oracle它应该出现在表中的哪个位置?如果是这样,怎么样?

Mic*_*odd 8

表中列的位置应该不重要(除非要考虑"页面大小",或Oracle用于实际存储数据的任何内容).对消费者更重要的是如何调用结果,即Select语句.


Ale*_*ort 6

将YOUR_ORIGINAL_TABLE重命名为YOUR_NEW_TABLE;

创建表YOUR_ORIGINAL_TABLE nologging/*或不可恢复*/作为从YOUR_NEW_TABLE中选择Column1,Column2,NEW_COLUMN,Column3;

下拉表YOUR_NEW_TABLE;

选择*来自YOUR_ORIGINAL_TABLE; <<<<<现在你会看到表格中间的新栏目.

但你为什么要这么做呢?这似乎是不合逻辑的.如果列顺序很重要,您永远不应该假设列排序,只使用命名列列表.

  • 它更像是一种美学的东西.存储的数据来自外部源(XML),在外部源中,他们在数据中间添加了一个字段.因此,我们的表现在与所有列的XML的顺序相同,但只有一个. (2认同)

Sql*_*yan 1

我不这么认为 - SQL Server 也不允许这些。我经常使用的方法是:

  1. 创建看起来正确的新表(包括附加列
  2. 开始交易
  3. 将旧表中的所有数据选择到新表中
  4. 删除旧表
  5. 重命名新表
  6. 提交交易。

不太漂亮,但完成了工作。

  • 当您使用表设计器时,SQL Server 将允许您将列放入表中您希望的位置。即使当前表中已有数据和行,也可以执行此操作(只要将列设置为 Nullable 或设置默认值) (2认同)
  • 步骤 2. 和 6. 是多余的。所有更改架构的 DDL 语句都会强制执行新的隐式事务。当您更改结构时,您不能进行未完成的 DML 更改。 (2认同)