Alter table en Oracle

Oracle Logo MiniUna vez hemos creado una tabla en Oracle es muy posible que en algún momento necesitemos hacer ciertas modificaciones a aluna de sus características. Añadir atributos, restricciones o modificar tipos son acciones habituales y debemos conocer los mecanismos para realizarlas sin necesidad de eliminar y crear nuevamente toda la tabla. En este post se muestran las opciones más comunes.

Sintaxis general

ALTER TABLE <nombreTabla>
 <ACCIONES>;

Añadir atributos

Para añadir atributos a una tabla lo haremos mediante ADD de la siguiente forma:

ALTER TABLE <nombreTabla>
 ADD <nombreColumna TIPO>

Ejemplo:

ALTER TABLE farmacia
 ADD propietario VARCHAR2(15);

Para añadir varios atributos a la vez:

ALTER TABLE <nombreTabla>
 ADD(
  <nombreColumna TIPO>,
  <nombreColumna TIPO>,
  ...
 );

Ejemplo:

ALTER TABLE farmacia
 ADD (
  propietario VARCHAR2(5),
  num_empl NUMBER
 );

ilumina2 photo

Modificación de tipos

Podemos modificar los atributos y sus tipos mediante modify tal y como se puede ver a continuación.

ALTER TABLE <nombreTabla>
 MODIFY<nombreColumna TIPO>;

Nota: Solo se puede cambiar de tipo (p.e. de char a int) si el atributo está vacío,es decir, este campo no contiene ningún valor en ninguna fila, y no es una clave foránea (ya que hace referencia a una primaria de otra tabla con el tipo original).

Solo se puede decrementar la precisión si no es inferior al contenido con longitud máxima.

Ejemplo:

ALTER TABLE farmacia
 MODIFY nombre VARCHAR2(20);

Modificación de varios atributos a la vez:

ALTER TABLE <nombreTabla>
 MODIFY(
  <nombreColumna TIPO>,
  <nombreColumna TIPO>,
  ...
 );

Ejemplo:

ALTER TABLE farmacia
MODIFY (
  nombre VARCHAR2(20),
  direccion VARCHAR2(6)
);

Eliminación

Para eliminar columnas de nuestra tabla podemos hacerlo mediante DROP COLUMN.

ALTER TABLE <nombreTabla>
 DROP COLUMN <nombreAtributo>;

Ejemplo:

ALTER TABLE farmacia
 DROP COLUMN propietario;

Para borrar varias columnas a la vez:

ALTER TABLE farmacia
 DROP (propietario, director,…);

Nota: Al borrar varias columnas a la vez omitimos COLUMN.

Restricciones

Añadir restricciones

Unique

ALTER TABLE <nombreTabla>
 ADD UNIQUE(<nombreAtributo>);

Ejemplo:

ALTER TABLE farmacia
 ADD UNIQUE(propietario);

Ejemplo con varios únicos:

ALTER TABLE farmacia
 ADD(
  UNIQUE (nombre),
  UNIQUE (direccion)
 );

Podemos crear tambien únicos formados por mas de un campo:

ALTER TABLE farmacia
 ADD UNIQUE(nombre, direccion,…); --La combinación de las dos debe ser única

Eliminación de restricción única:

ALTER TABLE farmacia
 DROP UNIQUE(nombre)

O bien para los únicos complejos:

ALTER TABLE farmacia
DROP UNIQUE(nombre, dirección,…);  --Si se crea UNIQUE compleja, se debe eliminar por completo

Añadir clave primaria

También es posible añadir o eliminar claves primarias con las tablas ya creadas. Para añadir la clave primaria a una tabla que no posee ninguna lo podemos hacer de la siguiente manera:

ALTER TABLE <nombreTabla>
 ADD PRIMARY KEY (<nombreAtributo>,...);

Eliminación de clave primaria:

ALTER TABLE <nombreTabla>
 DROP PRIMARY KEY [CASCADE]; -- CASCADE si hay foraneas apuntando a ella

Deshabilitar clave primaria:

ALTER TABLE <nombreTabla>
 DISABLE PRIMARY KEY [CASCADE];

Habilitar clave primaria:

ALTER TABLE <nombreTabla>
 ENABLE PRIMARY KEY;

Añadir claves foráneas:

ALTER TABLE <nombreTabla>
 ADD FOREIGN KEY(<nombreAtributo>) REFERENCES tablaDestino(<nombreAtributoDestino>);

Ejemplo para varias claves foráneas en la misma tabla:

ALTER TABLE farmacia
 ADD(
  FOREIGN KEY(farmacia) REFERENCES farmacia(idfarmacia),
  FOREIGN KEY(medicamento) REFERENCES medicamentos(idmedicamento)
 );

Añadir constraints:

Añadir varias constraints a la vez:

ALTER TABLE <nombreTabla>
 ADD(
  CONSTRAINT <nombreConstraint> <TIPO> (<condición>),
  CONSTRAINT <nombreConstraint> <TIPO>(<condición>),
  ...
);

Ejemplo:

ALTER TABLE farmacia
 ADD(
  CONSTRAINT ck_farmacia_prop CHECK(propietario >0),
  CONSTRAINT ck_farmacia_empl CHECK(empleados BETWEEN 1 AND 10),
  CONSTRAINT ck_farmacia_cierre CHECK(dia_cierre IN ('SABADO', 'DOMINGO', 'LUNES'),
  CONSTRAINT uq_farmacia_nom_dir_prop UNIQUE(nombre,direccion,propietario)
);

Eliminación de constraints:

ALTER TABLE farmacia
 DROP CONSTRAINT fk_compra_farmacia; --NO se puede con DROP FOREIGN KEY

Habilitar y deshabilitar constraints:

ALTER TABLE farmacia
 DISABLE CONSTRAINT pk_farmacias;
/
ALTER TABLE farmacia
 ENABLE CONSTRAINT pk_farmacias;

Renombrar columnas

Es posible cambiar el nombre a un atributo gracias a RENAME COLUMN.

ALTER TABLE farmacia
 RENAME COLUMN <nombre_inicial> to <nombre_final>;

Ejemplo:

En este ejemplo se modifica el nombre de la columna propietario. A partir de su ejecución, el nombre de dicha columna será propFarmacia.

ALTER TABLE farmacia
 RENAME COLUMN propietario to propFarmacia;

Renombrar tabla

Por último, también es posible renombrar una tabla mediante RENAME TO.

ALTER TABLE farmacia
 RENAME TO farmacias;
Anuncios

2 Responses to Alter table en Oracle

  1. d says:

    buen aporte

  2. me ha servido 🙂

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: