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.
  • 関連するすべての制約 (キー、FK など)、インデックス、およびトリガー/プロシージャを で再作成しますNEW_TABLE
  • DROP TABLE OLD_TABLE.
  • ALTER TABLE NEW_TABLE RENAME TO OLD_TABLE.

更新の受け入れ中にそれを行う必要がある場合は、dbms_redefinitionも参照することをお勧めします。

于 2013-01-11T11:23:37.593 に答える
0

ステートメントを使用して、オラクルのデータを失うことなく、テーブルを削除して作成できます

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 に答える