Sie sind auf Seite 1von 11

BASE DE DATOS ORACLE BASE DE DATOS ORACLE

CREACIN DE TABLAS TIPOS DE DATOS EN ORACLE

Las tablas son las unidades bsicas de almacenamiento de datos. Se muestra los tipos de datos / datatypes disponibles en Oracle para seleccionar el tipo
Veremos cmo se crean las tablas en Oracle y como se definen las restricciones de registro de una tabla Oracle. Tambin indicamos sus caractersticas (tamao
mximo, peculiaridades, etc). Es importante conocer los tipos de datos disponibles en
de integridad asociadas a dichas tablas.
un Sistema Gestor de Base de Datos (SGBD), de esta forma podremos optimizar al
En ausencia de dominios, se definirn las columnas y se asociarn todas las mximo el uso de recursos de nuestras aplicaciones. A continuacin os indicamos todos
restricciones de integridad semnticas admitidas (Nulos, Claves Primarias, los tipos de datos de Oracle y sus caractersticas bsicas:
Claves Alternativas (Clasula UNIQUE)) y restricciones de integridad sobre valores
de columnas en la tabla (Clusula CHECK). TIPO CARACTERISTICAS OBSERVACIONES

Para crear una tabla es necesario tener el privilegio CREATE TABLE y un rea de Entre 1 y 2000 bytes como mximo. Aunque
Almacenamiento. se introduzca un valor ms corto que el
Cadena de caracteres
indicado en el tamao, se rellenar al tamao
CHAR (alfanumricos) de
indicado. Es de longitud fija, siempre ocupar
longitud fija
Sintaxis de creacin de tabla. lo mismo, independientemente del valor que
contenga
CREATE TABLE [esquema.]tabla
{(columna tipo_de_datos [DEFAULT expr]
Entre 1 y 4000 bytes como mximo. El
[restriccin_columna]|[restriccin_tabla] Cadena de caracteres de
VARCHAR2 tamao del campo depender del valor que
[,columna ] longitud variable
contenga, es de longitud variable.
[TABLESPACE nom_tablespace |
CLUSTER nom_cluster (columna [,columna])] | Cadena de caracteres de
VARCHAR En desuso, se utiliza VARCHAR2 en su lugar
[AS consulta] }; longitud variable

restriccin_columna y restriccin_tabla: son las restricciones impuestas a la Entre 1 y 2000 bytes como mximo. El juego
columna y tabla. Cadena de caracteres de
de caracteres del tipo de datos (datatype)
nom_tablespace: indica el espacio lgico donde se quiere almacenar la tabla. longitud fija que slo
NCHAR NCHAR slo puede ser AL16UTF16 UTF8. El
Si no se especifica se utiliza el asignado por defecto. almacena caracteres
nom_cluster: es el nombre del agrupamiento si la tabla forma parte de uno. Las juego de caracteres se especifica cuando se
Unicode
columnas listadas son las columnas que la tabla aporta al agrupamiento, crea la base de datos Oracle
generalmente, las claves primarias. Si se especifica un clster ya no se
especifica el tablespace ya que se utilizar el tablespace donde se
Entre 1 y 4000 bytes como mximo. El juego
encuentra el agrupamiento. Cadena de caracteres de
consulta: inserta los registros procedentes de una consulta. No se especificarn de caracteres del tipo de datos (datatype)
longitud variable que slo
los tipos de datos ya que se toman de la consulta. La restriccin PRIMARY KEY no NVARCHAR2 NCHAR slo puede ser AL16UTF16 UTF8. El
almacena caracteres
se copia y se aade con ALTER TABLE. juego de caracteres se especifica cuando se
Unicode
crea la base de datos Oracle

Como mximo admite hasta 2 GB (2000 MB).


Cadena de caracteres de Los datos LONG debern ser convertidos
LONG apropiadamente al moverse entre diversos
longitud variable
sistemas.

Lic. Vladimir Cotaquispe Gutirrez. 1 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 2 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA
BASE DE DATOS ORACLE BASE DE DATOS ORACLE

Este tipo de datos est obsoleto (en desuso), Almacena datos binarios
en su lugar se utilizan los datos de tipo LOB no estructurados en Admiten hasta 8 terabytes.
(CLOB, NCLOB). Oracle recomienda que se archivos del sistema
convierta el tipo de datos LONG a alguno LOB El administrador de la base de datos debe
operativo, fuera de la
si an se est utilizando.
BFILE base de datos. Una asegurarse de que exista el archivo en disco y
columna BFILE almacena de que los procesos de Oracle tengan
No se puede utilizar en clasulas WHERE, permisos de lectura para el archivo.
un localizador del archivo
GROUP BY, ORDER BY, CONNECT BY ni
DISTINCT a uno externo que
contiene los datos

Una tabla slo puede contener una columna


de tipo LONG. ROWID fsico almacena la direccin de fila en
las tablas, las tablas en clster, los ndices,
excepto en las ndices-organizados (IOT).
Slo soporta acceso secuencial.
Almacenan cadenas Hasta 2 GB.
LONG RAW ROWID lgico almacena la direccin de fila en
binarias de ancho variable tablas de ndice-organizado (IOT).
En desuso, se sustituye por los tipos LOB.
Almacenan cadenas Hasta 32767 bytes. Un ejemplo del valor de un campo ROWID
RAW podra ser: "AAAIugAAJAAC4AhAAI". El
binarias de ancho variable
formato es el siguiente:
En desuso, se sustituye por los tipos LOB.
Admiten hasta 8 terabytes (8000 GB).
Permiten almacenar y Para "OOOOOOFFFBBBBBBRRR", donde:
manipular bloques
LOB (BLOG, Una tabla puede contener varias columnas de
grandes de datos no OOOOOO: segmento de la base de datos
CLOB, tipo LOB.
estructurados (tales como (AAAIug en el ejemplo). Todos los objetos que
NCLOB, estn en el mismo esquema y en el mismo
texto, imgenes, videos, Almacenar la direccin
BFILE) Soportan acceso aleatorio. segmento tendrn el mismo valor.
sonidos, etc) en formato ROWID nica de cada fila de la
binario o del carcter tabla de la base de datos
Las tablas con columnas de tipo LOB no FFF: el nmero de fichero del tablespace
pueden ser replicadas. relativo que contiene la fila (fichero AAJ en el
Permite almacenar datos ejemplo).
BLOB Admiten hasta 8 terabytes
binarios no estructurados
BBBBBB: el bloque de datos que contiene a la
fila (bloque AAC4Ah en el ejemplo). El nmero
Almacena datos de tipo de bloque es relativo a su fichero de datos, no
CLOB Admiten hasta 8 terabytes
carcter al tablespace. Por lo tanto, dos filas con
nmeros de bloque iguales podran residir en
diferentes datafiles del mismo tablespace.
Admiten hasta 8 terabytes.
Almacena datos de tipo
NCLOB RRR: el nmero de fila en el bloque (fila AAI
carcter Guarda los datos segn el juego de caracteres
en el ejemplo).
Unicode nacional.

Este tipo de campo no aparece en los SELECT


ni se puede modificar en los UPDATE, ni en los
INSERT. Tampoco se puede utilizar en los
Lic. Vladimir Cotaquispe Gutirrez. 3 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 4 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA
BASE DE DATOS ORACLE BASE DE DATOS ORACLE

CREATE. Es un tipo de datos utilizado Para no indicar la precisin y s la escala


exclusivamente por Oracle. Slo se puede ver podemos utilizar:
su valor utilizando la palabra reservada
ROWID, por ejemplo:
nombre_columna NUMBER (*, escala)

select rowid, nombre, apellidos from clientes


Para introducir nmeros que no estn el el
formato estndar de Oracle se puede utilizar
Ejemplo 2: la funcin TO_NUMBER.
Almacena tipos de datos
SELECT ROWID, SUBSTR(ROWID,15,4) Es un tipo NUMBER que slo almacena
FLOAT numricos en punto
"Fichero", SUBSTR(ROWID,1,8) "Bloque", nmeros en punto flotante
flotante
SUBSTR(ROWID,10,4) "Fila" FROM
proveedores
El tipo de datos DATE almacena el ao
(incluyendo el siglo), el mes, el da, las horas,
Ejemplo 3: una forma de saber en cuntos
los minutos y los segundos (despus de
ficheros de datos est alojada una tabla:
medianoche).

SELECT
Oracle utiliza su propio formato interno para
COUNT(DISTINCT(SUBSTR(ROWID,7,3)))
almacenar fechas.
"Numero ficheros " FROM facturacion
Admite ROWID a tablas que no sean de
Los tipos de datos DATE se almacenan en
UROWID ROWID universal Oracle, tablas externas. Admite tanto ROWID campos de longitud fija de siete octetos cada
lgicos como fsicos. uno, correspondiendo al siglo, ao, mes, da,
Almacena un punto en el hora, minuto, y al segundo.
DATE
Se admiten hasta 38 dgitos de precisin y son tiempo (fecha y hora)
portables a cualquier entre los diversos Para entrada/salida de fechas, Oracle utiliza
sistemas en que funcione Oracle. por defecto el formato DD-MMM-AA. Para
cambiar este formato de fecha por defecto se
utiliza el parmetro NLS_DATE_FORMAT.
Para declarar un tipo de datos NUMBER en un
CREATE UPDATE es suficiente con:
Para insertar fechas que no estn en el mismo
formato de fecha estndar de Oracle, se
nombre_columna NUMBER
puede utilizar la funcin TO_DATE con una
Almacena nmeros fijos y mscara del formato: TO_DATE (el 13 de
NUMBER opcionalmente se le puede indicar la precisin noviembre de 1992, DD del MES, YYYY)
en punto flotante
(nmero total de dgitos) y la escala (nmero
de dgitos a la derecha de la coma, decimales,
los coger de la precisin indicada):
Almacena datos de tipo
nombre_columna NUMBER (precision, escala) TIMESTAMP hora, fraccionando los
segundos
Si no se indica la precisin se tomar en
funcin del nmero a guardar, si no se indica Almacena datos de tipo
la escala se tomar escala cero. TIMESTAMP
hora incluyendo la zona
WITH TIME
horaria (explcita),
Lic. Vladimir Cotaquispe Gutirrez. 5 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 6 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA
BASE DE DATOS ORACLE BASE DE DATOS ORACLE

ZONE fraccionando los segundos 3. Primary Key. Clave primaria.


4. Check. D efinicin de reglas complejas.
Almacena datos de tipo 5. Foreign Key. Restricciones de integridad referencial. Soporta las acciones
TIMESTAMP
hora incluyendo la zona Cuando se usa un SELECT para mostrar los Update y Delete Restrict y Delete Cascade.
WITH
horaria local (relativa), datos de este tipo, el valor de la hora ser
LOCAL TIME
franccionando los ajustado a la zona horaria de la sesin actual
ZONE Se declaran al crear modificar la tabla (CREATE/ALTER TABLE).
segundos

Guas para el uso


Tipo de datos abstracto.
Se asocia a un esquema XML para la definicin
XMLType En realidad se trata de un - Es conveniente asignarles un nombre autodefinido que permita referirlas de forma fcil
de su estructura.
CLOB.
con posterioridad. Si el usuario no les asigna nombre el sistema las denomina
SYS_C<n>, donde <n> es un nmero entero diferente para cada restriccin.

De los tipos anteriores, los comunmente utilizados son: VARCHAR2 (cadenas de texto - Pueden ser definidas a la vez que se crea la tabla (dentro del CREATE TABLE)
no muy grandes), DATE (fechas, horas), NUMBER (nmeros), BLOB (ficheros de tipo o posteriormente (ALTER TABLE).
word, excel, access, video, sonido, imgenes, etc) y CLOB (cadenas de texto muy
grandes). - Se pueden definir a nivel de columna o a nivel de tabla.

Restricciones Comprobar restricciones existentes

Las reglas de negocio se implementan en ORACLE mediante restricciones (constraints),


disparadores (triggers) o cdigo de aplicacin. Con la sentencia DESCRIBE solo se muestran las restricciones NOT NULL. Para ver las
El ORACLE Server se basa en las restricciones para prevenir la entrada de datos no
vlidos en las tablas. dems es necesario consultar la vista USER_CONSTRAINTS del diccionario de datos.
En suma, al trabajar con ORACLE, las restricciones se pueden emplear para: Ejemplos:
Forzar el cumplimiento de reglas por los datos de una tabla cuando se inserta una
fila, se elimina o se modifica. La restriccin debe ser satisfecha para que la Obtener la lista de restricciones definidas en el diccionario
operacin DML se concluya con xito. de datos: SELECT * FROM
Prevenir el borrado de una tabla cuando existen dependencias desde otras tablas. USER_CONSTRAINTS;
Proveer reglas para otras herramientas (ORACLE DEVELOPER u otros CASE).
NOTA: En el listado C=CHECK, P=PRIMARY KEY, R=FOREIGN KEY.
NOT NULL se representa como un caso especial de CHECK.
Es importante que los datos de una base de datos, estn sujetos a reglas de integridad
predefinidas.
Igual, pero solo para la tabla Empleados:

Oracle permite definir y forzar que se verifiquen las reglas de integridad de los SELECT * FROM
datos declarando USER_CONSTRAINT
Restricciones de Integridad y definiendo Database Triggers. S WHERE
table_name=Emplea
dos;
Una Restriccin de Integridad, es un mtodo declarativo de definir una restriccin para
una columna de una tabla. Oracle soporta: Comprobar las columnas asociadas

1. Not Null. No admite valores nulos. Las columnas asociadas con cada restriccin se pueden consultar en la vista.
2. Unique. Slo admite valores nicos.
Lic. Vladimir Cotaquispe Gutirrez. 7 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 8 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA
BASE DE DATOS ORACLE BASE DE DATOS ORACLE

USER_CONS_COLUMNS del diccionario de datos. Ejemplo: Sintaxis para restricciones de integridad.


Pueden ser aplicadas sobre columnas, que se colocan tras la definicin de la columna o
SELECT * FROM
USER_CONS_COLUMNS sobre la tabla, que implican ms de una columna.
WHERE
table_name=Empleados Restricciones sobre columnas.
; [CONSTRAINT restriccin]

Otras vistas del diccionario de datos tiles para este tema son ALL_CONSTRAINTS y [NOT NULL | [UNIQUE | PRIMARYKEY] |
[REFERENCES [esquema.]tabla [(columna)]
ALL_CONS_COLUMNS. [ON DELETE CASCADE] ] |
[CHECK (condicin) ] ]
Definicin de Restricciones al Crear una Tabla
Sintaxis: [[USING INDEX
[TABLESPACE
CREATE TABLE [<esquema>.]<tabla>
nom_tablespace ]]|

(<columna> <tipo de dato> [DEFAULT <expresin>] [<restriccin de columna>], DISABLE]

Restriccin: nombre que le damos a la restriccin. Por defecto, Oracle le signa SY_Cn,
siendo n un entero.
AS <subconsulta> NOT NULL: no admite valores nulos.
UNIQUE: los valores de la columna son nicos.
[<restriccin de tabla>] [, ] );
PRIMARYKEY: la columna es clave primaria.
REFERENCES: indica que la columna es clave ajena en una relacin de integridad
donde:
referencial.
<esquema> Nombre del propietario. Slo es necesario indicarlo si no es el ON DELETE CASCADE: Mantiene la integridad referencial eliminando los
mismo que el del esquema. registros del lado relacionado cuando se eliminan los registros del lado principal
de la relacin.
<tabla> Nombre de la tabla
CHECK: todo valor que se introduzca en la columna debe cumplir la condicin
<expresin> Especifica un valor por defecto que sera usado si una operacin Admite las mismas
expresiones que una clusula WHERE.
INSERT no especifica valor
USING INDEX: indica el tablespace donde se almacenan los ndices generados
<columna> Nombre de la columna por UNIQUE y
PRIMARYKEY.
<tipo de dato> Tipo de dato de la columna y su longitud DISABLE: permite desactivar la restriccin al crearla. Se puede activar con
ENABLE/DISABLE del
<restriccin de columna> Restriccin de integridad que se define como parte de la
definicin de una columna particular ALTER TABLE.

<restriccin de tabla> Restriccin de integridad que se define fuera de las definicin de las
columnas, es decir, a nivel de tabla

Lic. Vladimir Cotaquispe Gutirrez. 9 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 10 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA
BASE DE DATOS ORACLE BASE DE DATOS ORACLE

Restricciones sobre tablas.


2. Restriccin UNIQUE
[CONSTRAINT restriccin]
[[UNIQUE | PRIMARYKEY] (columna [, columna] ) | Es una restriccin de unicidad. Impide que pueden existir dos filas con el valor de la
[FOREIGN KEY (columna [, columna] ) REFERENCES columna (unique key) o columnas (composite unique key).
[esquema.]tabla [(columna)]
Permite la entrada de valores nulos salvo que se establezca a la vez una restriccin
[ON DELETE CASCADE] ] | NOT NULL. Basta con que una de las columnas tome para el valor nulo para que se
[CHECK (condicin) ] ] considere que se cumple la restriccin de unicidad.
[[USING INDEX
Las composite unique key slo se pueden crear a nivel de tabla.
[TABLESPACE
nom_tablespace ]]| El ORACLE Server crea un ndice de valores nicos como mecanismo para conrolar este
DISABLE] tipo de restricciones. Sintaxis:

A nivel de columna:
1. Restriccin NOT NULL
[CONSTRAINT <nombre>] UNIQUE
Tambin llamada de obligatoriedad. Slo se puede definir a nivel de columna, no de tabla.
A nivel de tabla:
Sintaxis:
[CONSTRAINT <nombre>] UNIQUE (<columna>[,])
[CONSTRAINT <nombre>] [NOT] NULL
donde:
donde:<nombre> Nombre de la restriccin
<nombre> Nombre de la restriccin
Ejemplo:
<columna> Nombre de la columna
CREATE TABLE Empleados (
Ejemplo:

CREATE TABLE Empleados (
nombre VARCHAR2(20) NOT NULL,


apellidos VARCHAR2(40) NOT NULL, nombre VARCHAR2(20),
Fecha_alta DATE

CONSTRAINT fecha_obli NOT NULL,
email VARCHAR2(25) UNIQUE,


);
CONSTRAINT apel_nom_unico UNIQUE (apellidos,nombre),

);

Lic. Vladimir Cotaquispe Gutirrez. 11 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 12 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA
BASE DE DATOS ORACLE BASE DE DATOS ORACLE

3. Restriccin PRIMARY KEY 4. Restriccin FOREIGN KEY

Es una restriccin de clave primaria. Slo se puede definir una para cada tabla. Es una restriccin de integridad referencial. Designa a una o varias columnas como clave
ajena y establece una relacin de referencia con una clave primaria o clave unica (UNIQUE)
Esta restriccin equivale a una restriccin de unicidad (UNIQUE) y otra de de otra tabla o de la misma.
obligatoriedad
El valor de la clave ajena debe coincidir con un valor existente en la tabla referenciada
(NOT NULL) combinadas. (parent table) o ser nulo.

Igual que para UNIQUE, existen primary key y composite primary key (formadas por Las claves ajenas son puramente lgicas (estn basadas en valores de datos) y por tanto no
ms son punteros fsicos.

Las composite foreign key estn formadas por ms de una columna y deben ser
de una columna). stas segundas se definen a nivel de tabla.
definidas a nivel de tabla.
El ORACLE Server crea un ndice de valores nicos como mecanismo para controlar
Sintaxis:
la unicidad en este tipo de restricciones.
A nivel de columna:
Sintaxis:

[CONSTRAINT <nombre>]
A nivel de columna:

REFERENCES [<esquema>].<tabla> [(<columna>[,])]


[CONSTRAINT <nombre>] PRIMARY KEY

[ON DELETE {CASCADE | SET NULL}]


A nivel de tabla:

A nivel de tabla:
[CONSTRAINT <nombre>] PRIMARY KEY (<columna>[,])

[CONSTRAINT <nombre>]
donde:

FOREIGN KEY (<columna>[,])


<nombre> Nombre de la restriccin

REFERENCES [<esquema>].<tabla> [(<columna>[,])]


<columna> Nombre de la columna

[ON DELETE {CASCADE | SET NULL}]


Ejemplo:
donde:
CREATE TABLE Departamentos (
<nombre> Nombre de la restriccin
num NUMBER(4),
<esquema> Nombre del propietario. Slo es necesario indicarlo si no es el
nombre VARCHAR2(30) NOT NULL, mismo que el del esquema.

<tabla> Nombre de la tabla padre (referenciada o destino)

CONSTRAINT dep_pk PRIMARY KEY (num) <columna> Nombre de columna

);
Lic. Vladimir Cotaquispe Gutirrez. 13 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 14 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA
BASE DE DATOS ORACLE BASE DE DATOS ORACLE

Ejemplo a nivel de columna: - ON DELETE SET NULL: pone las claves ajenas de las filas dependientes de la tabla
origen a nulos.
CREATE TABLE Empleados (
- La opcin por defecto, que se activa si no se incluye ON DELETE es no permitir la accin

dep NUMBER(4)
de eliminar la fila de la tabla padre (equivale a un ON DELETE NO

CONSTRAINT emp_dep_fk ACTION). No existe la clusula ON UPDATE (modos de modificacin).

REFERENCES Departamentos (num),


5. Restriccin CHECK

Define una condicin que deben cumplir todas las filas de la tabla.
);
La condicin es igual que las condiciones de la clusula WHERE del SELECT salvo porque no
Ejemplo a nivel de tabla: puede incluir:

CREATE TABLE Empleados ( - Referencias a pseudocolumnas (CURRVAL, NEXTVAL, LEVEL, ROWNUM).

dep NUMBER(4) - Llamadas a las funciones SYSDATE, UID, USER y USERENV.

- Consultas que refieren a otros valores en otras filas.

CONSTRAINT emp_dep_fk - Subconsultas (subqueries).

FOREIGN KEY (dep) Una columna puede tener asociadas tantas restricciones CHECK como se desee.

REFERENCES Departamentos (num) Sintaxis:

); [CONSTRAINT <nombre>] CHECK (<condicin>)

A nivel de columna no aparecen las palabras clave FOREIGN KEY. A nivel de tabla indican donde:

las columnas de la tabla origen (child table) que forman la clave ajena. <nombre> Nombre de la restriccin

Detrs de la palabra clave REFERENCES se indican la tabla y columnas de destino. <condicin> Una expresin que debe ser cierta para todas las filas de la tabla. A nivel

Modos de Borrado de columna slo puede referir a dicha columna. A nivel de


tabla puede referir a otras columnas, pero a los valores de la
misma fila.
Slo existen tres modos de borrado, que indican lo que debe hacer ORACLE Server cuando
se
Ejemplo a nivel de columna:
elimina una fila de la tabla padre:
CREATE TABLE Empleados (
- ON DELETE CASCADE: borra las filas dependientes de la tabla origen.

Lic. Vladimir Cotaquispe Gutirrez. 15 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 16 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA
BASE DE DATOS ORACLE BASE DE DATOS ORACLE

salario <nombre> Nombre de la restriccin


NUMBER(8,
2) CONSTRAINT <tipo> Tipo de la restriccin
CHECK (salario>0),
<columna> Nombre de la columna

);

Ejemplo a nivel de tabla: Ejemplo:

Aadir la restriccin de clave ajena para el supervisor en la tabla de Empleados.


CREATE TABLE Empleados (
ALTER TABLE Empleados

ADD CONSTRAINT
salario NUMBER(8,2), neto NUMBER(8,2), emp_supervisor_f
k FOREIGN KEY
(supervisor_id)
REFERENCES
CONSTRAINT neto_max Empleados(id);

CHECK (neto<=salario*08) 7. Eliminando Restricciones en Tablas Existentes

); Se pueden consultar las vistas (views) USER_CONSTRAINTS y USER_CONS_COLUMNS

del diccionario de datos para identificar el nombre de la restricciones y las columnas que
6. Aadiendo Restricciones en Tablas Existentes tienen asociadas.

Se emplea la sentencia ALTER TABLE para: Emplear la clasula DROP de la sentencia ALTER TABLE para eliminar la restriccin.

- Aadir o eliminar una restriccin, pero no se puede modificar su estructura o definicin. La opcin CASCADE hace que se eliminen todas las restricciones dependientes de la

- Activar (enable) o desactivar (disable) restricciones. elegida. Sintaxis:

- Aadir una restriccin NOT NULL a una columna existente mediante la


clasula ALTER TABLE <tabla>

MODIFY. Sintaxis: DROP { PRIMARY KEY | UNIQUE (<columna>) | CONSTRAINT <nombre>

[CASCADE];
ALTER TABLE <tabla>
donde:
ADD [CONSTRAINT <nombre>] <tipo de restriccin> (<columna>);
<tabla> Nombre de la tabla
donde:
<columna> Nombre de la columna afectada por la restriccin
<tabla> Nombre de la tabla
Lic. Vladimir Cotaquispe Gutirrez. 17 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 18 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA
BASE DE DATOS ORACLE BASE DE DATOS ORACLE

<nombre> Nombre de la restriccin DISABLE CONSTRAINT emp_pk CASCADE;

Ejemplos: 9. Activando Restricciones

Eliminar la restriccin de clave ajena para el supervisor en la tabla de Empleados. Se puede activar la comprobacin de una restriccin mediante la opcin ENABLE de
la sentencia ALTER TABLE.
ALTER TABLE Empleados
En el momento de la activacin, todos los datos de la tabla deben satisfacer la restriccin.
DROP CONSTRAINT emp_supervisor_fk;
En el caso de restricciones UNIQUE o PRIMARY KEY, se crea automticamente un ndice
Eliminar la restriccin de clave primaria de la tabla Departamentos y la clave ajena asociada asociado.
de empleados (Empleados.id-> Departamentos).
Tambin se puede incluir ENABLE durante la creacin de la tabla (CREATE TABLE).
ALTER TABLE Departamentos
Sintaxis:
DROP PRIMARY KEY CASCADE;

ALTER TABLE <tabla>


8. Desactivando Restricciones
ENABLE CONSTRAINT <nombre>;
Se puede desactivar la comprobacin de una restriccin, aunque siga estando en el
esquema, mediante la opcin DISABLE de la sentencia ALTER TABLE. donde:

Tambin se puede incluir DISABLE durante la creacin de la tabla (CREATE TABLE) para <tabla> Nombre de la tabla

que desde el principio est desactivada.


<nombre> Nombre de la restriccin

Desactivar una restriccin UNIQUE o PRIMARY KEY supone remover el ndice asociado.
Ejemplo:
Sintaxis:
Volver a activar la restriccin de clave primaria de la tabla de Empleados.

ALTER TABLE <tabla> ALTER TABLE Empleados

DISABLE CONSTRAINT <nombre> [CASCADE];


ENABLE CONSTRAINT emp_pk;

donde:
10.Restricciones en Cascada
<tabla> Nombre de la tabla
Un fenmeno que requiere especial atencin es la eliminacin de columnas de una tabla que
<nombre> Nombre de la restriccin son

la base de restricciones que dependen unas de otras en cascada.


Ejemplo:
Para controlar este problema existe la clusula CASCADE CONSTRAINTS, que se emplea
Desactivar la restriccin de clave primaria de la tabla de Empleados. junto con DROP COLUMN. Esta clusula supone:

ALTER TABLE Empleados - Eliminar todas las restricciones de integridad referencial que refieren (apuntan) a
Lic. Vladimir Cotaquispe Gutirrez. 19 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 20 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA
BASE DE DATOS ORACLE BASE DE DATOS ORACLE

claves primarias o nicas (UNIQUE) definidas sobre las columnas borradas. PRCTICA - RESTRICCIONES

- Eliminar las restricciones multicolumna (composite) definidas sobre las columnas Disear la estructura del esquema de la base de datos ACADEM:
borradas. Ejemplo:
DEPARTAMENTOS (codigo, nombre) AREAS (codigo, nombre, departamento)
CREATE TABLE prueba1 (
PROFESORES (codigo, apellido1, apellido2, nombre_pila, activo, categoria, dedicacion,
pk NUMBER PRIMARY KEY, area) ASIGNATURAS (siglas, nombre, creditos, curso, anualidad, clase, horas_teoria,
horas_practica, grupos_teoria , grupos_practica, alumnos)
fk NUMBER,
LOCALES (codigo, nombre, docente, capacidad, edificio, situacion)
col1 NUMBER,
GRUPOS (curso, clase, codigo, nombre)
col2 NUMBER,
DOCENCIA (id, curso, clase, grupo, siglas, profesor, local, dia, hora, periodicidad)
CONSTRAINT fk_cons FOREIGN KEY (fk) REFERENCES prueba1,
CONSTRAINT ck1 CHECK (pk>0 AND col1>0),
areas.departamento departamentos
profesores.area areas
CONSTRAINT ck2 CHECK (col2>0) );
docencia.curso, clase, grupo grupos
docencia.profesor profesores
Al ejecutar
docencia.local locales
docencia.siglas asignaturas
ALTER TABLE prueba1 DROP (pk);

se produce un error porque pk es clave de la tabla padre de la integridad referencial. 1. Cambiar la definicin de la restriccin de clave primaria de la tabla Departamentos
para asignarle el nombre dep_pk.
Al ejecutar 2. Aadir la regla de negocio de que los profesores slo pueden tener una
dedicacin de tiempo completo (TC), o parcial de 6 horas (6 h) o de 3 horas (3 h).
ALTER TABLE prueba1 DROP (col1); Comprobar que se ha modelado bien intentando modificar la dedicacin del profesor
con codigo=1 al valor 20 y observando el mensaje de error que se produce.
se produce un error porque col1 es empleada por la restriccin multicolumna ck1.
3. Comprobar cuales son las restricciones que estn definidas en la tabla Locales. Una de
ellas no es necesaria al ser redundante. Detectarla y eliminarla. Realizar alguna
Los errores se evitan incluyendo CASCADE CONSTRAINTS:
operacin de tipo DML para demostrar que aunque dicha restriccin se ha eliminado,
ALTER TABLE prueba1 DROP (pk) CASCADE CONSTRAINTS; en realidad se sigue cumpliendo gracias a otra restriccin.
ALTER TABLE prueba1 DROP (col1) CASCADE CONSTRAINTS;
4. Desactivar la restriccin NOT NULL en la columna nombre de la tabla
Departamentos. Comprobar mediante alguna operacin UPDATE que est
desactivada. Volver a intentar activarla y averiguar qu efecto produce el cambio
producido por la operacin anterior. Resolver la situacin de forma que la restriccin
queda activada.

5. Definir la regla de negocio de que una asignatura tiene una hora semanal de clase (de
teora y/o de prctica) por cada 3 crditos. Comprobar antes de aadirla al
esquema, que dicha regla se cumple con los datos actuales.

Lic. Vladimir Cotaquispe Gutirrez. 21 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA Lic. Vladimir Cotaquispe Gutirrez. 22 E.P. DE INGENIERIA DE SISTEMA E INFORMATICA

Das könnte Ihnen auch gefallen