sql >> Databasteknik >  >> RDS >> Oracle

ändra tabell modifiera kolumn i Oracle-databasen

Vi kan ändra kolumndatatypen i en tabell med ändra tabell ändra kolumn i Oracle

ALTER TABLE table_nameMODIFY kolumnnamn ;

Åtgärd kan vara många saker som
(a) ändra datatypen
(b) Förkorta eller bredda datatypen
(c) Ändra standardvärdet
(d) Ändra till tillåt null eller inte null
(e) Kolumnsynlighet
(d) Virtuell kolumnändring
Låt oss börja en efter en

Oracle MODIFY-kolumnändringsdatatyp

Du kan endast ändra kolumnändringsdatatyp om kolumnen är tom

SQL> CREATE TABLE Books_master( Book_Id NUMBER(6,0),Title VARCHAR2(50),Author VARCHAR2(50),ISBN VARCHAR2(25),BCCost NUMBER(6,0),Public_Year NUMBER(4,0) ,CONSTRAINT Books_master_PK PRIMARY KEY (Book_Id),CONSTRAINT Books_master_UK1 UNIQUE (Titel, författare),CONSTRAINT Books_master_UK2 UNIQUE (ISBN));Tabell skapad

Eftersom tabellen är tom kan vi ändra datatyp för kolumnändring

SQL> ändra tabell Books_master modifiera ISBN-NUMMER(6,0);Tabell ändrad.SQL> ändra tabell Books_master modifiera ISBN VARCHAR2(25);Tabell ändrad.

Låt oss infoga lite data

SQL> INSERT INTO Books_master (Book_Id, Title, Author, ISBN, BCost, Publish_Year) VÄRDEN (10, 'Complete/Convenient', 'Ketan Bhagat', 'ISBN 978-93-80349-92-3', 195 , 2013);1 rad created.commit;

Försök nu igen att ändra kolumnen för att ändra datatyp

SQL> ändra tabell Books_master modify ISBN NUMBER(6,0); alter table Books_master modify ISBN NUMBER(6,0)*ERROR på rad 1:ORA-01439:kolumnen som ska ändras måste vara tom för att ändra datatyp 

Nu kan vi null den kolumnen och köra den här satsen framgångsrikt

SQL> uppdatera Books_master set ISBN=null;1 rad uppdaterad.SQL> commit;Commit complete.SQL> ändra tabell Books_master modifiera ISBN-NUMMER(6,0);Tabell ändrad.

Vad ska vi göra nu om vi vill behålla data, det finns flera alternativ
(a) Lägg till ny kolumn som ny datatyp, kopiera data till den här kolumnen, ta bort den gamla kolumnen, byt namn på ny kolumn som faktiskt kolumnnamn:

alter table books_master add ISBN1 number;update books_master set ISBN1=to_number(ISBN);alter table drop kolumn ISBN;alter table döper kolumn ISBN1 till ISBN;

(b) Använd DBMS_REDEFINITION och bygg om din tabell med nya kolumner

Oracle MODIFY-kolumn Förkorta eller bredda datatypen (ändra tabell ändra kolumnstorlek oracle)

Detta används när vi vill ändra VARCHAR-byte eller tecken.
Exempel

Här ökar vi VARCHAR-längden från 50 till 100

SQL> ändra tabell Books_master ändra titel VARCHAR2(100); Tabell ändrad.

Om vi ​​nu försöker förkorta längden från 100 till 10

SQL> ändra tabell Books_master ändra titel VARCHAR2(10); ändra tabell Books_master ändra titel VARCHAR2(10)*ERROR på rad 1:ORA-01441:kan inte minska kolumnlängden eftersom något värde är för stort

Detta händer eftersom befintlig data inte passar in i den storleken. Så antingen kan du öka längden eller uppdatera den kolumnen

SQL> ändra tabell Books_master ändra titel VARCHAR2(20); Tabell ändrad.

Oracle MODIFY-kolumns standardvärde

om vi måste ändra standardvärdet för kolumnen

SQL> ändra tabell BOOKS_MASTER ändra BCOST standard 1000; Tabell ändrad.

Nästa gång om någon infogning sker och BCOST är null, kommer det att ha ett standardvärde som 1000

ändra tabell BOOKS_MASTER modify BCOST default 1000;Table altered.SQL> INSERT INTO Books_master (Book_Id, Title, Author, ISBN,Publish_Year) VÄRDEN (21, 'Deception', 'Dan', 123,2001);1 rad skapad; .SQL> commit;Commit complete.SQL> välj BCOST från Books_master där book_id=21;BCOST-----1000 

Oracle MODIFY-kolumn NULL eller NOT NULL

Vi kan ändra kolumnen för att tillåta null eller inte noll

SQL> desc books_masterName Null? Typ---- --- ----BOOK_ID INTE NULL NUMMER(6)TITEL VARCHAR2(20)AUTHOR VARCHAR2(50)ISBN NUMMER(6)BCOST INTE NULL NUMMER(6)PUBLISH_YEAR NUMBER(4)SQL> ändra tabell BOOKS_MASTER modifiera PUBLISH_YEAR inte null;Tabell ändrad.SQL> desc books_masterName Null? Typ---- ---- -----BOOK_ID INTE NULL NUMMER(6)TITEL VARCHAR2(20)AUTHOR VARCHAR2(50)ISBN NUMBER(6)BCOST NOT NULL NUMBER(6)PUBLISH_YEAR INTE NULL NUMMER(4) 

Om du ändrar till inte null bör vi ha ett befintligt värde, annars kommer detta att misslyckas

Synlighet för Oracle MODIFY-kolumn

Vi kan ändra kolumns synlighet med Ändra kolumn

SQL> desc books_masterName Null? Typ---- ---- -----BOOK_ID INTE NULL NUMMER(6)TITEL VARCHAR2(20)AUTHOR VARCHAR2(50)ISBN NUMBER(6)BCOST NOT NULL NUMBER(6)PUBLISH_YEAR INTE NULL NUMMER(4) SQL> ändra tabell BOOKS_MASTER modifiera PUBLISH_YEAR osynlig; Tabell ändrad. Nu blir kolumnen invisibleSQL> desc books_masterName Null? Typ---- ---- ----BOOK_ID INTE NULL NUMMER(6)TITEL VARCHAR2(20)AUTHOR VARCHAR2(50)ISBN NUMMER(6)BCOST NOT NULL NUMBER(6)SQL> ändra tabell BOOKS_MASTER ändra PUBLISH_YEAR synlig;Tabell ändrad.Nu blir kolumnen visibleSQL> desc books_masterName Null? Typ--- ----- -----BOOK_ID INTE NULL NUMMER(6)TITEL VARCHAR2(20)AUTHOR VARCHAR2(50)ISBN NUMBER(6)BCOST NOT NULL NUMBER(6)PUBLISH_YEAR INTE NULL NUMMER(4) 

Jag hoppas att du gillar det här inlägget på oracle alter-tabellen, ändra kolumnen. Lämna gärna feedbacken

Läser också
ändra tabell lägg till kolumn oracle
ändra tabell byt namn på kolumn oracle
släpp kolumn i oracle
https://docs.oracle.com/cd/B28359_01/server.111/b28286/ statements_3001.htm


  1. MySQL:Sortera GROUP_CONCAT-värden

  2. Möjliga sätt att åtgärda problem med korruption av SQL Server-metadata

  3. T-SQL lagrad procedur som accepterar flera Id-värden

  4. Få kolumnprivilegier för en tabell i SQL Server med T-SQL:sp_column_privileges