lunes, 30 de julio de 2007

Modificar tablas

Cláusula ALTER TABLE

Se utiliza para alterar la definición de una tabla:

  • Añadiendo o eliminando columnas o restricciones.
  • Modificando definiciones de columnas(tipo de datos, Not Null, etc)

Sintaxis:
Para agregar columnas

ALTER TABLE nombre_tabla
ADD ( {colum1 tipo_dato [DEFAULT exp][constraint_colum]}
[, {Colum2 tipo_dato [DEFAULT exp][constraint_colum]}]…);

Ejemplo:

  • Agregue la columna telefono a la tabla emp1 con el tipo Char(8).

ALTER TABLE emp1
ADD (telefono CHAR(8));

http://liang.armstrong.edu:5560/isqlplus

Ejemplo:

  • Agregue la columna pais a la tabla dept; dicha columna deberá ser del tipo de datos Varchar2, longitud 20 y Not null.

ALTER TABLE dept
ADD (pais varchar2(20) NOT NULL);

alter table dept
*
ERROR at line 1: ORA-01758: table must be empty to add mandatory (NOT NULL) column

Debe recordar que:
No es posible añadir una columna nueva que tenga un constraint Not Null a una tabla que tenga datos.

Ejemplo:

  • La comision debe ser menor o igual que el salario.

ALTER TABLE emp1
ADD CHECK(comision <= salario);

Ejemplo:

  • Cree un Foreign Key entre las tablas empx(copia de la tabla emp) y la tabla deptx(copia de la tabla dept).

1. Primero crearemos la copia de las 2 tablas

Copia de la tabla emp

Create Table empx As
Select * from emp;

Copia de la tabla dept

Create table deptx As
Select * from dept;

2. Crearemos ahora el constraint Primary Key en la tabla deptx sobre el campo deptno. (Obligatorio porque al crearse la copia se pierden todos los constraints, excepto los Not Null)

Alter Table deptx
Add constraint pk_deptx Primary Key (deptno);

3. Ahora crearemos el constraint Foreign Key en el campo deptno de la tabla empx. (Recuerde que un departamento tiene varios empleados)

Alter table empx
Add constraint fk_empx_deptx Foreign Key (deptno)
References deptx

4. Verifiquemos la creación del Foreign Key: fk_empx_deptx en la tabla empx.

Select Constraint_name Nombre, Column_name Columna
From User_cons_columns
Where Table_name='EMPX' and Column_name='DEPTNO';

No hay comentarios: