2

我有一张桌子

Name              Age                    RollNo.
A                  1                      10
B                  2                      20

现在我想以这样的方式永久改变表格,改变后它应该如下所示

RollNo.           Name                    Age
10                 A                      1
20                 B                      2

我应该如何改变这张桌子,我想做的就是改变桌子的物理结构。

4

2 回答 2

3

你为什么要这样做?

如果只是因为您希望在使用时具有正确的列顺序SELECT *,那么您一开始就不应该使用*。始终在查询中使用准确的列列表。

如果是因为您认为它会提高性能,您是否进行了实际测量?我怀疑您会发现许多情况,其中更改物理列顺序会显着影响性能。在某些情况下可能会使用链接行(请参阅本文中的“行链接”部分,但这不适用于像您这样的窄行。


话虽如此,您可以:

  • CREATE TABLE NEW_TABLE AS SELECT <different column order> FROM OLD_TABLE.
  • NEW_TABLE.
  • DROP TABLE OLD_TABLE.
  • ALTER TABLE NEW_TABLE RENAME TO OLD_TABLE.

如果您在接受更新时需要这样做,您可能还想查看dbms_redefinition 。

于 2013-01-11T11:23:37.593 回答
0

您可以使用语句删除和创建表而不会丢失 oracle 中的数据

create table YOUR_TABLE_BU as select * from YOUR_TABLE

请通过链接 -如何在不复制数据的情况下创建 Oracle 表的副本?更多细节。尝试:

CREATE TABLE YOUR_TABLE_BU AS SELECT * FROM YOUR_TABLE;

DROP TABLE YOUR_TABLE;

CREATE TABLE YOUR_TABLE AS SELECT RollNo., Name, Age FROM YOUR_TABLE_BU;

DROP TABLE YOUR_TABLE_BU;
于 2013-01-10T06:42:15.737 回答