Oracle
 sql >> Database >  >> RDS >> Oracle

altera la tabella modifica la colonna nel database di Oracle

Noi può modificare il tipo di dati della colonna in una tabella utilizzando altera la tabella modifica la colonna in Oracle

ALTER TABLE table_name
MODIFY column_name <action>;

L'azione può essere molte cose come
(a) cambiare il tipo di dati
(b) Accorciare o ampliare il tipo di dati
(c) Cambiare il valore predefinito
(d) Cambiare in consenti null o non null
(e) Visibilità colonna
(d) Modifica colonna virtuale
Iniziamo uno per uno

Tipo di dati di modifica della colonna Oracle MODIFY

Puoi modificare il tipo di dati di modifica della colonna solo se la colonna è vuota

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

Poiché la tabella è vuota, possiamo modificare il tipo di dati di modifica della colonna

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

Inseriamo alcuni dati

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;

Ora prova di nuovo a modificare la colonna per cambiare il tipo di dati

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

Ora possiamo annullare quella colonna ed eseguire questa istruzione con successo

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.

Ora cosa fare se vogliamo mantenere i dati, ci sono più opzioni
(a) Aggiungi nuova colonna come nuovo tipo di dati, copia i dati in questa colonna, elimina la vecchia colonna, rinomina la nuova colonna come nome effettivo della colonna:

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) Usa DBMS_REDEFINITION e ricostruisci la tua tabella con nuove colonne

Oracle MODIFY colonna Accorcia o allarga il tipo di dati (alter table, modifica la dimensione della colonna oracle)

Viene utilizzato quando si desidera modificare i byte oi caratteri VARCHAR.
Esempio

Qui stiamo aumentando la lunghezza VARCHAR da 50 a 100

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

Ora, se stiamo cercando di ridurre la lunghezza da 100 a 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

Ciò accade poiché i dati esistenti non rientrano in quella dimensione. Quindi puoi aumentare la lunghezza o aggiornare quella colonna

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

Valore predefinito della colonna MODIFY di Oracle

se dobbiamo modificare il valore di default della colonna

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

Ora la prossima volta se si verifica un inserimento e BCOST è nullo, avrà un valore predefinito come 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 colonna NULL o NOT NULL

Possiamo modificare la colonna per consentire null o non null

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)

Se stai cambiando in non null, dovremmo avere un valore esistente, altrimenti fallirà

Oracle MODIFY visibilità della colonna

Possiamo modificare la visibilità della colonna con Modifica colonna

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)

Spero che questo post ti piaccia sulla tabella alter di Oracle, modifica la colonna. Si prega di fornire il feedback

Legge anche
alter table add column oracle
alter table rename column oracle
drop colonna in oracle
https://docs.oracle.com/cd/B28359_01/server.111/b28286/ dichiarazioni_3001.htm