テーブル Tb に既に 3 つの列 A、B、C があるとします。B と C の間に新しい列 M を追加したいのですが、どうすればよいですか?
M を追加すると、テーブルは次のようになります。ABMC であり、ABCM ではありませんか?
テーブル Tb に既に 3 つの列 A、B、C があるとします。B と C の間に新しい列 M を追加したいのですが、どうすればよいですか?
M を追加すると、テーブルは次のようになります。ABMC であり、ABCM ではありませんか?
簡単な答えは、できないということです。列は常に最後に追加されます。ただし、クエリと 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;
それがエクスプレス版のオプションかどうかはわかりませんが(疑う傾向がありますが、確認するのに便利なXEデータベースがありません)、バーバラがその例で示しているように、DBMS_REDEFINITION
パッケージを潜在的に使用することもできます. 舞台裏では、Oracle は基本的に上記と同じことを行っていますが、いくつかのマテリアライズド ビュー ログを追加して、操作中にアプリケーションがテーブルにアクセスし続けられるようにしています。
ただし、テーブル内の列の順序が気になる場合は、どちらかの道を進み続けるよりも、何が間違っていたかを理解するために立ち止まった方がはるかに良いでしょう. テーブル内の列の物理的な順序を気にすることは、非常にまれです。