sql >> データベース >  >> RDS >> Oracle

Oracleデータベースのテーブルドロップ列を変更する

    多くの場合、テーブルに列をドロップする必要があります。 Oracleで列を削除する方法は2つあります
    (a)Oracleでテーブルの削除列を変更します
    (b)Oracleでテーブルセットの未使用の列を変更します

    DROPCOLUMNを使用したDROPCOLUMN

    ここでは、以下のコマンドを使用してテーブルから列を削除します

    ALTER TABLE table_name
    DROP COLUMN col_name;

    このステートメントはテーブルを排他的にロックします。テーブルが大きい場合、クエリの実行に時間がかかります

    SQL> CREATE TABLE Books_master
    ( Book_Id NUMBER(6,0),
    Title VARCHAR2(50),
    Author VARCHAR2(50),
    ISBN VARCHAR2(25),
    BCost NUMBER(6,0),
    Publish_Year NUMBER(4,0),
    CONSTRAINT Books_master_PK PRIMARY KEY (Book_Id),
    CONSTRAINT Books_master_UK1 UNIQUE (Title, Author),
    CONSTRAINT Books_master_UK2 UNIQUE (ISBN)
    ) ;
    Table created.
    
    SQL> INSERT INTO Books_master (Book_Id, Title, Author, ISBN, BCost, Publish_Year) VALUES (10, 'Complete/Convenient', 'Ketan Bhagat', 'ISBN 978-93-80349-92-3', 195, 2013);
    SQL>INSERT INTO Books_master (Book_Id, Title, Author, ISBN, BCost, Publish_Year) VALUES (20, 'Deception Point', 'Dan Brown', 'ISBN 0-671-02738-7', 563,2001);
    SQL> INSERT INTO Books_master (Book_Id, Title, Author, ISBN, BCost, Publish_Year) VALUES (30, 'Angels-Demons', 'Dan Brown', 'ISBN 0-671-02736-0',563, 2000);
    SQL>INSERT INTO Books_master (Book_Id, Title, Author, ISBN, BCost, Publish_Year) VALUES (40, 'Harry Potter', 'J.K. Rowling', 'ISBN 0-7475-5100-6', 102,2003);
    
    SQL> commit;
    Commit complete.
    
    SQL> column TITLE format a10
    SQL> column AUTHOR format a10
    SQL> column ISBN format a15
    SQL > Desc BOOKS_MASTER

    このテーブルから列を削除しましょう

    SQL> alter table books_master drop column PUBLISH_YEAR;
    Table altered.
    
    SQL > Desc BOOKS_MASTER
    SQL> Select * from Books_master;

    SETUNUSEDを使用して列を削除

    • 列を削除する際に消費されるリソースが心配な場合は、ALTERTABLE…SETUNUSEDステートメントを使用できます。
    • このステートメントは、1つ以上の列を未使用としてマークしますが、実際にはターゲット列データを削除したり、これらの列が占めるディスク領域を復元したりすることはありません。
    • 未使用としてマークされた列はクエリまたはデータディクショナリビューに表示されず、新しい列がその名前を再利用できるようにその名前が削除されます。列に定義されているすべての制約、インデックス、および統計も削除されます。

    構文

    ALTER TABLE
    SET UNUSED COLUMN ;

    後でコマンドを使用してリソースが少なくなったときに、未使用の列を削除できます

    ALTER TABLE
    未使用の列を削除します;

    テーブルが大きい場合は、CHECKPOINTオプションを使用して、累積されるUNDOログの量を減らすことができます。これにより、指定された数の行が処理された後にチェックポイントが強制されます。チェックポイントを使用すると、ドロップ列の操作中に蓄積される元にされるログの量が削減され、元にできるスペースが使い果たされる可能性がなくなります。

    ALTER TABLE table_name DROP UNUSED COLUMNS CHECKPOINT 500;

    • ドロップコマンドでチェックポイント構文を使用した場合は、ドロップの途中でセッションを強制終了する(またはデータベースをシャットダウンする)ことができます。
    • テーブルはDMLまたはクエリには使用できません
    • 「続行」(オプションのチェックポイントを使用)オプションを使用して、「列の削除」コマンドを終了できます。
    alter table
    drop columns continue checkpoint;
    
    alter table
    drop columns continue checkpoint 5000;


    以前に作成したテーブルを使用しましょう

    SQL> alter table books_master set unused column ISBN;
    Table altered.
    SQL> desc books_master
    SQL> Select * from Books_master;

    以下のビューUSER_UNUSED_COL_TABS、ALL_UNUSED_COL_TABS、またはDBA_UNUSED_COL_TABS

    を照会することで、未使用の列数を確認できます。
    SQL> select * from DBA_UNUSED_COL_TABS where TABLE_NAME='BOOKS_MASTER';

    これで、活動の少ない期間にカラムをドロップできます

    SQL> alter table Books_master drop unused columns;
    Table altered.
    
    SQL> select * from DBA_UNUSED_COL_TABS where TABLE_NAME='BOOKS_MASTER';
    no rows selected

    複数の列を削除する方法

    ドロップコマンド中に複数の列を指定できます

    SQL> alter table books_master drop (AUTHOR,TITLE);
    Table altered.

    オラクルのテーブルドロップ列の変更に投稿してください。フィードバックを提供してください

    また読む
    Oracleプライマリキー
    altertablemove
    alter table rename column in oracle
    https://docs.oracle.com/cd/B28359_01/server.111/b28310/tables006 htm


    1. データソースを構成せずにODBCリンクサーバーを作成する

    2. MySQLで使用可能な文字セットのリストを返す方法

    3. DatabaseError:現在のトランザクションは中止され、トランザクションブロックが終了するまでコマンドは無視されますか?

    4. PostgresENUMデータ型またはCHECKCONSTRAINT?