多くの場合、テーブルに列をドロップする必要があります。 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