sql >> Base de Datos >  >> RDS >> Oracle

alterar tabla modificar columna en base de datos oracle

Nosotros puede cambiar el tipo de datos de la columna en una tabla usando alterar tabla modificar columna en Oracle

ALTER TABLE table_name
MODIFY column_name <action>;

La acción puede ser muchas cosas como
(a) cambiar el tipo de datos
(b) Acortar o ampliar el tipo de datos
(c) Cambiar el valor predeterminado
(d) Cambiar a permitir nulo o no nulo
(e) Visibilidad de columna
(d) Modificación de columna virtual
Empecemos uno por uno

La columna MODIFY de Oracle cambia el tipo de datos

Puede modificar el tipo de datos de cambio de columna solo si la columna está vacía

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

Como la tabla está vacía, podemos modificar el tipo de datos de cambio de columna

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

Insertemos algunos datos

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;

Ahora intente nuevamente modificar la columna para cambiar el tipo de datos

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

Ahora podemos anular esa columna y ejecutar esta declaración con éxito

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.

Ahora, qué hacer si queremos conservar los datos, hay múltiples opciones
(a) Agregar una nueva columna como nuevo tipo de datos, copiar datos a esta columna, eliminar la columna anterior, cambiar el nombre de la nueva columna como el nombre real de la columna:

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) Use DBMS_REDEFINITION y reconstruya su tabla con nuevas columnas

Oracle MODIFY columna Acortar o ampliar el tipo de datos (alterar tabla modificar tamaño de columna oracle)

Esto se usa cuando queremos cambiar los bytes o caracteres VARCHAR.
Ejemplo

Aquí estamos aumentando la longitud de VARCHAR de 50 a 100

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

Ahora, si estamos tratando de acortar la longitud de 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

Esto sucede porque los datos existentes no se ajustan a ese tamaño. Entonces puede aumentar la longitud o actualizar esa columna

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

Valor predeterminado de la columna MODIFY de Oracle

si tenemos que modificar el valor por defecto de la columna

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

Ahora, la próxima vez que ocurra alguna inserción y BCOST sea nulo, tendrá un valor predeterminado de 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 columna NULL o NOT NULL

Podemos modificar la columna para permitir valores nulos o no nulos

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)

Si está cambiando a no nulo, deberíamos tener un valor existente, de lo contrario, esto fallará

Visibilidad de la columna MODIFY de Oracle

Podemos cambiar la visibilidad de la columna con Modificar columna

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)

Espero que les guste esta publicación en la tabla de cambios de Oracle, modifique la columna. Proporcione sus comentarios

También lee
modificar tabla añadir columna oracle
modificar tabla renombrar columna oracle
soltar columna en oracle
https://docs.oracle.com/cd/B28359_01/server.111/b28286/ declaraciones_3001.htm