0

假设我的表 Tb 中已经有 3 列 A、B、C。我想在 B 和 C 之间添加一个新列 M。我该怎么做?

添加 M 后,我的表格应该看起来像 - ABMC 而不是 ABCM ?

4

1 回答 1

3

简单的答案是你不能。列总是在最后添加。但是,您不应该关心表中列的顺序,因为您应该始终在查询和 DML 中明确列出列。并且您应该始终有一个界面层(例如视图),如果顺序很重要,您可以在适当的位置添加新列。

如果你真的下定了决心,可以新建一个列序的新表,将数据移到新表中,删除旧表,重命名新表。您需要在表上重新创建任何索引、约束或触发器。就像是

ALTER TABLE tb
  ADD( M NUMBER );

CREATE TABLE tb_new
AS
SELECT a, b, m, c
  FROM tb;

DROP TABLE tb;

ALTER TABLE tb_new 
  RENAME TO tb;

我不确定它是否是 Express Edition 中的一个选项(我倾向于怀疑它是,但我没有方便验证的 XE 数据库),但您也可以使用Barbara 在该示例中显示的DBMS_REDEFINITION包。在幕后,Oracle 与上面所做的基本相同,但添加了一些物化视图日志,以允许应用程序在操作期间继续访问表。

但是,如果您发现自己关心表格中列的顺序,那么最好停下来找出自己做错了什么,而不是继续在任一路径上前进。您应该非常非常罕见地关心表中列的物理顺序。

于 2012-08-30T01:44:42.667 回答