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

DDL

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) );