Oracle将列移至第一位

时间:2009-12-01 08:00:22

标签: database oracle

有没有办法将oracle表中的列从最后一个位置移动到第一个位置?有人丢弃了ID列,并重新创建了它。所以现在它结束了,这是一个问题,因为我们的一些PHP脚本使用第一列作为标识符(一个抽象模型使用此基础对象超过100个其他模型..)

另见

  

8 个答案:

答案 0 :(得分:18)

Oracle FAQ说:

  

Oracle只允许将列添加到现有表的末尾。

你必须重新创建你的桌子。

RENAME tab1 TO tab1_old;

CREATE TABLE tab1 AS SELECT id, <the rest of your columns> FROM tab1_old;

答案 1 :(得分:7)

修改表格列的逻辑顺序的最简单方法是重命名表格并创建一个“右”列位置的视图:

ALTER TABLE your_table RENAME TO your_table_t;

CREATE VIEW your_table AS SELECT <columns in the right order> FROM your_table_t;

-- grants on the view (the same as the table)
GRANT ** TO ** ON your_table;

您的应用程序的行为就像列位于“正确”位置一样。您不必触及物理结构。

答案 2 :(得分:2)

在Oracle 12c中,现在可以更轻松地在逻辑上重新排列列。可以通过使列不可见/可见来实现。如果将不可见列更改为可见,则列将显示在odering中的最后一列。

Consider Using Invisible Columns

创建wxyz表:

创建表t(     w INT,
    y VARCHAR2,     z VARCHAR2,     x VARCHAR2

);

将x列重新排列到中间位置:

ALTER TABLE wxyz MODIFY(y INVISIBLE,z INVISIBLE); ALTER TABLE wxyz MODIFY(y VISIBLE,z VISIBLE);

DESCRIBE wxyz;

名称

w

X

ý

ž

答案 3 :(得分:1)

重新创建表格(通过重命名/临时表,以免丢失数据)是我所知道的唯一方法。

我认为不可能只是更改列顺序。

答案 4 :(得分:1)

如果没有大量数据/列,您只需按所需顺序重命名列即可。然后,只需在此处删除*表格中的*即表格&#39;。这对我来说是一个很好的解决方案,因为我还没有插入很多记录。

答案 5 :(得分:0)

您可能希望通过视图访问您的表,因此如果对应用程序技术很重要,您可以轻松地重新排列逻辑顺序。

答案 6 :(得分:0)

无法在oracle中移动列。它将在最后一个位置创建。如果有人想要,则需要创建视图或者需要创建新表

答案 7 :(得分:-2)

我一直都在使用它:

ALTER TABLE MOVE COLUMN column_name TO ordinal_position;