50列以上のテーブルがあり、最初の2列の順序を入れ替える必要があります。 Oracleを使用してこれを達成する最良の方法は何ですか?テーブル名がORDERDETAILSであり、最初の2つの列がITEM_IDとORDER_IDであると仮定します。名前の変更が完了すると、テーブル名はまだORDERDETAILSになっているはずですが、最初の2つの列はORDER_IDとITEM_IDになります。 FWIW、列タイプ、残りの列、およびそれらの順序はireleventです。
間違っている場合は修正してください。しかし、一般的な手順は次のとおりです。
私はOracleの経験がほとんどないので、おそらく1つまたは2つ足りません。
主キーはOracleのインデックスを意味しますか?主キーを削除すると、インデックスも削除されますか?
SQLの例は大歓迎です。
編集:助けを提供するのではなく、なぜそれを行う必要があるのか疑問に思う人々に不誠実な感謝。なぜそれを行う必要があるのかという質問に答えるために、私はこの方法でそれを行う必要があると言う他の誰かからの指示に従っています。列の順序は重要です。これについての私の考え/意見は無関係です。
パッケージDBMS_Redefinitionを見てください。新しい順序でテーブルを再構築します。テーブルでオンラインで行うことができます。
Phil Brownが指摘したように、これを行う前に慎重に考えてください。ただし、行の列をスキャンし、更新時にデータを移動するとオーバーヘッドが発生します。私が使用する列の順序付けルール(順不同):
これらのルールは競合しており、最新リリースですべてのパフォーマンスがテストされているわけではありません。ほとんどは実際にテストされていますが、結果を文書化しませんでした。配置オプションは、3つの相反する目標の1つをターゲットとしています。わかりやすい列の配置。高速データ取得;更新時の最小限のデータ移動。
Oracle 12cのリリース以降、論理的に列を再配置するのが簡単になりました。
Oracle 12cでは、列を非表示にするサポートが追加され、その機能を使用して論理的に列を再配置できます。
非表示列に関するドキュメント からの引用:
非表示の列を表示すると、その列は最後の列としてテーブルの列順序に含まれます。
テーブルを作成します。
CREATE TABLE t (
a INT,
b INT,
d INT,
e INT
);
列を追加します。
ALTER TABLE t ADD (c INT);
列を中央に移動します。
ALTER TABLE t MODIFY (d INVISIBLE, e INVISIBLE);
ALTER TABLE t MODIFY (d VISIBLE, e VISIBLE);
DESCRIBE t;
Name
----
A
B
C
D
E
これについては、 Oracle 12cの新機能に関するTom Kyteの記事 から学びました。
Oracleがこれを許可しないのは悲しいことです。開発者からいつもそうするように頼まれます。
少し危険な、やや迅速で汚い方法を次に示します。
CREATE TABLE table_right_columns AS SELECT column1 column3, column2 FROM table_wrong_columns; -- Notice how we correct the position of the columns :)
DROP TABLE table_wrong_columns;
そして、次回テーブルを作成するときは、将来の要件を考慮してください! ;)
列の位置を変更する場合は、ビューを使用してください。SELECTco1_1、col_3、col_2 FROM UNORDERDED_POSITIONとしてCREATE VIEW CORRECTED_POSITIONが役立ちます。
この要求は、SELECT * FROM [table_name]を使用している場所でいくつかのレポートが作成されるように作成されます。または、ビジネスによっては、バックエンドから読みやすくするために情報を配置する階層アプローチがあります。
ありがとうディリップ