sql >> Database >  >> RDS >> Oracle

tabel wijzigen kolom wijzigen in Oracle-database

Wij kan het kolomgegevenstype in een tabel wijzigen met verander tabel wijzig kolom in orakel

ALTER TABLE table_name
MODIFY column_name <action>;

Actie kan veel dingen zijn, zoals
(a) het gegevenstype wijzigen
(b) Het gegevenstype inkorten of verbreden
(c) de standaardwaarde wijzigen
(d) Wijzigen in null of niet nulls toestaan
(e) Kolomzichtbaarheid
(d) Virtuele kolomwijziging
Laten we één voor één beginnen

Oracle MODIFY kolom wijzigen gegevenstype

U kunt het gegevenstype voor het wijzigen van kolommen alleen wijzigen als de kolom leeg is

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

Aangezien de tabel leeg is, kunnen we het gegevenstype voor het wijzigen van de kolom wijzigen

SQL> alter table Books_master modify ISBN NUMBER(6,0);
Table altered.
SQL> alter table Books_master modify ISBN VARCHAR2(25);
Table altered.

Laten we wat gegevens invoegen

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);
1 row created.
commit;

Probeer nu opnieuw de kolom te wijzigen om het datatype te wijzigen

SQL> alter table Books_master modify ISBN NUMBER(6,0);
alter table Books_master modify ISBN NUMBER(6,0)
*
ERROR at line 1:
ORA-01439: column to be modified must be empty to change datatype

Nu kunnen we die kolom ongeldig maken en deze instructie met succes uitvoeren

SQL> update Books_master set ISBN=null;
1 row updated.
SQL> commit;
Commit complete.
SQL> alter table Books_master modify ISBN NUMBER(6,0);
Table altered.

Wat nu te doen als we de gegevens willen behouden, er zijn meerdere opties
(a) Nieuwe kolom toevoegen als nieuw gegevenstype, gegevens naar deze kolom kopiëren, de oude kolom verwijderen, de nieuwe kolom hernoemen als de werkelijke kolomnaam:

alter table books_master add ISBN1 number;
update books_master set ISBN1=to_number(ISBN);
alter table drop column ISBN;
alter table rename column ISBN1 to ISBN;

(b) Gebruik DBMS_REDEFINITION en herbouw uw tabel met nieuwe kolommen

Oracle MODIFY column Verkort of verbreed het datatype (wijzig tabel wijzig kolomgrootte oracle)

Dit wordt gebruikt wanneer we de VARCHAR-bytes of tekens willen wijzigen.
Voorbeeld

Hier vergroten we de VARCHAR-lengte van 50 naar 100

SQL> alter table Books_master modify title VARCHAR2(100);
Table altered.

Als we nu proberen de lengte in te korten van 100 naar 10

SQL> alter table Books_master modify title VARCHAR2(10);
alter table Books_master modify title VARCHAR2(10)
*
ERROR at line 1:
ORA-01441: cannot decrease column length because some value is too big

Dit gebeurt omdat bestaande gegevens niet in die grootte passen. Dus ofwel de lengte vergroten of die kolom bijwerken

SQL> alter table Books_master modify title VARCHAR2(20);
Table altered.

Oracle MODIFY kolom standaardwaarde

als we de standaardwaarde van de kolom moeten wijzigen

SQL> alter table BOOKS_MASTER modify BCOST default 1000;
Table altered.

De volgende keer dat er iets wordt ingevoegd en BCOST is null, heeft het een standaardwaarde als 1000

alter table BOOKS_MASTER modify BCOST default 1000;
Table altered.

SQL> INSERT INTO Books_master (Book_Id, Title, Author, ISBN,Publish_Year) VALUES (21, 'Deception', 'Dan', 123,2001);
1 row created.
SQL> commit;
Commit complete.

SQL> select BCOST from Books_master where book_id=21;
BCOST
-----
1000

Oracle MODIFY kolom NULL of NIET NULL

We kunnen de kolom aanpassen om null of niet nulls toe te staan

SQL> desc books_master
Name Null? Type
---- ---   ----
BOOK_ID NOT NULL NUMBER(6)
TITLE VARCHAR2(20)
AUTHOR VARCHAR2(50)
ISBN NUMBER(6)
BCOST NOT NULL NUMBER(6)
PUBLISH_YEAR NUMBER(4)

SQL> alter table BOOKS_MASTER modify PUBLISH_YEAR not null;
Table altered.

SQL> desc books_master
Name Null? Type
---- ----  -----
BOOK_ID NOT NULL NUMBER(6)
TITLE VARCHAR2(20)
AUTHOR VARCHAR2(50)
ISBN NUMBER(6)
BCOST NOT NULL NUMBER(6)
PUBLISH_YEAR NOT NULL NUMBER(4)

Als u wijzigt naar niet null, zouden we bestaande waarde moeten hebben, anders mislukt dit

Oracle MODIFY kolomzichtbaarheid

We kunnen de zichtbaarheid van de kolom wijzigen met Kolom wijzigen

SQL> desc books_master
Name Null? Type
---- ---- -----
BOOK_ID NOT NULL NUMBER(6)
TITLE VARCHAR2(20)
AUTHOR VARCHAR2(50)
ISBN NUMBER(6)
BCOST NOT NULL NUMBER(6)
PUBLISH_YEAR NOT NULL NUMBER(4)

SQL> alter table BOOKS_MASTER modify PUBLISH_YEAR invisible;
Table altered.

Now the column become invisible

SQL> desc books_master
Name Null? Type
---- ----  ----
BOOK_ID NOT NULL NUMBER(6)
TITLE VARCHAR2(20)
AUTHOR VARCHAR2(50)
ISBN NUMBER(6)
BCOST NOT NULL NUMBER(6)

SQL> alter table BOOKS_MASTER modify PUBLISH_YEAR visible;
Table altered.

Now the column become visible
SQL> desc books_master
Name Null? Type
--- ----- -----
BOOK_ID NOT NULL NUMBER(6)
TITLE VARCHAR2(20)
AUTHOR VARCHAR2(50)
ISBN NUMBER(6)
BCOST NOT NULL NUMBER(6)
PUBLISH_YEAR NOT NULL NUMBER(4)

Ik hoop dat je dit bericht leuk vindt op de orakel-altertabel om de kolom aan te passen. Geef alsjeblieft de feedback

Leest ook
tabel wijzigen kolom oracle toevoegen
tabel wijzigen kolom Oracle hernoemen
kolom neerzetten in oracle
https://docs.oracle.com/cd/B28359_01/server.111/b28286/ statements_3001.htm


  1. FIND_IN_SET() versus IN()

  2. XML doorgeven als parameter aan opgeslagen procedure in Oracle

  3. Haal de bovenste 1 rij van elke groep

  4. Een weergave maken in SQL Server