Databases
T05-005 Modificación de tablas
Enunciado
Modificar columnas de una tabla
Si queremos modificar columnas de una tabla: podemos modificar tanto el tipo de datos y como sus propiedades. Todos los cambios son posibles si la tabla no contiene datos. En general, si la tabla no está vacía podremos aumentar la longitud de una columna, aumentar o disminuir en número de posiciones decimales en un tipo NUMBER, reducir la anchura siempre que los datos no ocupen todo el espacio reservado para ellos.
Sintaxis:
ALTER TABLE NombreTabla MODIFY
(Columna1 TipoDatos [propiedades]
[, columna2 TipoDatos [propiedades] ...] );Ejemplo:
En el ejercicio anterior hemos generado la tabla ESTUDIANTES con la siguiente estructura:
TABLE_NAME COLUMN_NAME DATA_TYPE DATA_LENGTH DATA_PRECISION ESTUDIANTES APELLIDOS VARCHAR2 50 - ESTUDIANTES CURSO NUMBER 22 1 ESTUDIANTES FECHANAC DATE 7 - ESTUDIANTES NOMBRE VARCHAR2 25 - Esta estructura es equivalente a la ejecución de la siguiente sentencia:
CREATE TABLE ESTUDIANTES ( Nombre VARCHAR2(25), Apellidos VARCHAR2(50), FechaNac DATE, Curso NUMBER(1) );Nos hemos dado cuenta de que el tamaño reservado tanto al Nombre como a los Apellidos es demasiado grande, por lo que, para ahorrar espacio, hemos decidido reducir el tamaño de dichos atributos a 15 y 30 respectivamente. Para ello, deberíamos ejecutar la siguiente sentencia:
ALTER TABLE ESTUDIANTES MODIFY ( Nombre VARCHAR2(15), Apellidos VARCHAR2(30) );Ejercicio:
Imagina que hemos creado la siguiente tabla:
CREATE TABLE MODULOS ( Nombre VARCHAR2(100), NumHoras NUMBER, Codigo NUMBER(4), UnidadCompetencia VARCHAR2(100) );Aumenta el número de dígitos que puede contener el atributo Codigo hasta 5 y reduce el atributo UnidadCompetencia a un máximo de 60 caracteres.
Tipo
Solución
ALTER TABLE MODULOS MODIFY (
Codigo NUMBER(5),
UnidadCompetencia VARCHAR2(60)
);
Prueba
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH, DATA_PRECISION FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'MODULOS' ORDER BY COLUMN_NAME;
LibrerÃas (Onfly databases)
CREATE TABLE MODULOS (
Nombre VARCHAR2(100),
NumHoras NUMBER,
Codigo NUMBER(4),
UnidadCompetencia VARCHAR2(100)
);

