Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Ändern Sie die Drop-Spalte der Tabelle in der Oracle-Datenbank

Wir müssen oft die Spalte in der Tabelle löschen. Es gibt zwei Möglichkeiten, die Spalte in Oracle zu löschen
(a) Tabellenspalte in Oracle löschen
(b) Tabellensatz nicht verwendete Spalte in Oracle ändern

DROP COLUMN mit DROP COLUMN

Hier löschen wir die Spalte aus der Tabelle mit dem folgenden Befehl .

ALTER TABLE table_name
DROP COLUMN col_name;

Diese Anweisung nimmt eine exklusive Sperre für die Tabelle und wenn die Tabelle groß ist, wird es einige Zeit dauern, die Abfrage auszuführen

Beispiel

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

Lassen Sie uns eine Spalte aus dieser Tabelle löschen

SQL> alter table books_master drop column PUBLISH_YEAR;
Table altered.

SQL > Desc BOOKS_MASTER
SQL> Select * from Books_master;

Spalte löschen mit SET UNUSED

  • Wenn Sie Bedenken hinsichtlich der Ressourcen haben, die beim Löschen der Spalte verbraucht werden, können Sie die Anweisung ALTER TABLE…SET UNUSED verwenden.
  • Diese Anweisung markiert eine oder mehrere Spalten als unbenutzt, entfernt jedoch nicht die Daten der Zielspalte oder stellt den von diesen Spalten belegten Speicherplatz wieder her.
  • Eine als unbenutzt markierte Spalte wird in Abfragen oder Datenwörterbuchansichten nicht angezeigt, und ihr Name wird entfernt, damit eine neue Spalte diesen Namen wiederverwenden kann. Alle für die Spalte definierten Einschränkungen, Indizes und Statistiken werden ebenfalls entfernt.

Syntax

ALTER TABLE 
SET UNUSED COLUMN ;

Wir können die ungenutzte Spalte später löschen, wenn die Ressource niedriger ist, indem wir den Befehl

verwenden

ALTER TABLE 
Drop  UNUSED COLUMNS;

Wenn Sie große Tabellen haben, können Sie die Menge der angesammelten Undo-Protokolle mit der Option CHECKPOINT reduzieren, die einen Prüfpunkt erzwingt, nachdem die angegebene Anzahl von Zeilen verarbeitet wurde. Checkpointing reduziert die Menge an Rückgängig-Protokollen, die während der Drop-Column-Operation angesammelt werden, um eine mögliche Erschöpfung des Rückgängig-Speicherplatzes zu vermeiden.

ALTER TABLE Tabellenname DROP UNUSED COLUMNS CHECKPOINT 500;

  • Wenn Sie die Checkpoint-Syntax mit Ihrem Drop-Befehl verwendet haben, könnten Sie die Sitzung beenden (oder die Datenbank herunterfahren) während des Drops.
  • Die Tabelle ist nicht für DML oder Abfragen verfügbar
  • Sie können den Befehl „Spalten löschen“ mit der Option „Fortfahren“ (mit einem optionalen Prüfpunkt) abschließen.
alter table
drop columns continue checkpoint;

alter table
drop columns continue checkpoint 5000;

Beispiel
Lassen Sie uns mit der zuvor erstellten Tabelle fortfahren

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

Wir können die Anzahl der unbenutzten Spalten überprüfen, indem wir die unten stehende Ansicht USER_UNUSED_COL_TABS, ALL_UNUSED_COL_TABS oder DBA_UNUSED_COL_TABS

abfragen
SQL> select * from DBA_UNUSED_COL_TABS where TABLE_NAME='BOOKS_MASTER';

Jetzt können Sie die Spalte in Zeiten geringer Aktivität löschen

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

So löschen Sie mehrere Spalten

Wir können während des Drop-Befehls mehrere Spalten angeben

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

Ich hoffe, Ihnen gefällt der Beitrag in der Drop-Spalte der Alter-Tabelle in Oracle. Bitte geben Sie Feedback

Liest auch
Oracle-Primärschlüssel
Tabellenverschiebung ändern
Tabellenumbenennungsspalte in Oracle ändern
https://docs.oracle.com/cd/B28359_01/server.111/b28310/tables006. htm