Capitulo 10 Completo
Capitulo 10 Completo
Capitulo 10 Completo
9-2
Objetos de la base de datos
OBJETO DESCRIPCIÓN
Tabla Unidad básica de almacenamiento (compuesta de filas y
columnas). Se pueden crear en cualquier momento, no se
necesita definir el tamaño del almacenamiento (se
recomienda) y su estructura se puede redefinir en línea.
Vista Representación lógica de un subconjunto de datos de una
o más tablas
Secuencia Genera valores numéricos
Índice Mejora el rendimiento de algunas consultas
Sinónimo Nombre alternativo de objetos de una base de datos
Otros Procedimientos, funciones, disparadores, clusters, enlaces
a bases de datos y demás
9-3
Reglas para el nombrado
Los nombres de las tablas y de las columnas
deben:
Iniciar con una letra.
Tener una longitud máxima de 30 caracteres.
Contener sólo los caracteres A-Z, a-z, 0-9, _ (underscore),
$ y #. Los últimos dos no se recomiendan.
Ser únicos en el mismo esquema (usuario dueño de los
objetos).
Ser diferentes a las palabras reservadas de Oracle.
Se puede usar “” para nombrar tablas y usar palabras reservadas.
No se recomienda.
Otras recomendaciones.
Usar nombres que describan el contenido.
Los nombres no son sensibles a mayúsculas y minúsculas.
9-4
Sentencia CREATE TABLE
CREATE TABLE [Esquema.]Tabla (
Columna1 TipoDeDato [DEFAULT Expresión]
[, Columna2 …]
);
9-5
Referenciando tablas de otro usuario
SELECT *
FROM [Esquema.]Tabla
Empleados
SELECT *
FROM UsuarioB.Empleados
UsuarioB
UsuarioA
9-6
La opción DEFAULT
Especifica un valor por defecto para una columna
durante una inserción, por ejemplo:
… Emp_FechaContrato DATE DEFAULT SYSDATE,
9-7
Creando tablas
CREATE TABLE
realiza un
COMMIT
automático
(DDL).
Revisar ejemplo
de creación de
tablas con
definición de
almacenamiento.
9-8
Tipos de tablas en una BD Oracle
Tablas de usuario.
Creadas y mantenidas por un usuario.
Contienen información de una aplicación del
usuario (o de un conjunto de usuarios).
9-9
Tablas del diccionario de datos
PREFIJO DESCRIPCIÓN
USER_ Muestran información de los objetos que pertenecen
usuario/esquema actual.
ALL_ Muestran información de los objetos que el usuario
actual puede acceder.
DBA_ Muestran información de todo el Servidor Oracle.
Sólo las pueden acceder los usuarios que tienen el role
de DBA.
V$ Muestran información de rendimiento del servidor de la
base de datos, el uso de la memoria y los candados
utilizados por la instancia.
9-10
Uso del diccionario de datos
SELECT *
FROM CAT;
9-12
Tipos de datos
Ver Almacenamiento de algunos Tipos de datos
TIPO DE DATO DESCRIPCIÓN
VARCHAR2 (Tamaño) Almacena un valor alfa-numérico de longitud
variable. El tamaño almacenado depende de la
longitud del valor digitado. Longitud máxima
4000 bytes.
CHAR [(Tamaño)] Almacena un valor alfa-numérico de longitud
fija, así el valor especificado sea menor (se
rellena con espacios). El tamaño es opcional
por defecto se define en 1. Longitud máxima
2000.
NUMBER [(Precisión, escala)] Numérico de longitud variable. La precisión (de
(Ver ejemplos de escala 1 a 38) es el número total de dígitos y la escala
negativa) (-84 a 127) los dígitos al lado derecho del
punto decimal. La precisión por defecto es el
valor máximo y la escala por defecto es cero.
9-13
Tipos de datos
9-14
Tipos de datos
Una tabla puede tener varias columnas de tipo LOB (BLOB,
CLOB, NCLOB, BFILE), pero no pueden ser usados en
DISTINCT, GROUP BY, ORDER BY o JOINs.
TIPO DE DATO DESCRIPCIÓN
BLOB Acepta archivos de imágenes y video
(Binary Large OBject) Binarios hasta de 4 GB o lo definido para el tamaño
del bloque de la base de datos.
CLOB Acepta bastante texto. El tamaño máximo se calcula
(Character Large OBject) igual que para BLOB de 4 GB.
NCLOB Acepta datos CLOB en Unicode, soportado
universalmente. El tamaño máximo se calcula igual
que para BLOB.
BFILE Binarios almacenados en un archivo externo con
tamaño máximo de 4 GB.
9-15
Tipos de datos
TIPO DE DATO DESCRIPCIÓN
TIMESTAMP Almacena desde años hasta fracciones de segundo. La
[(precisión)] precisión (de 0 a 9, por defecto 6) indica cuantos dígitos
se van a tomar para las fracciones de segundo
Teniendo en cuenta la zona horaria.
TIMESTAMP [(precisión)] WITH TIME ZONE, adiciona nombre
de la zona horaria.
TIMESTAMP [(precisión)] WITH LOCAL TIME ZONE, adiciona
nombre de la zona horaria de la sesión del usuario.
INTERVAL YEAR Almacena intervalos de fecha tomando años y meses.
[(precisión_año)] TO La precisión_año por defecto es 2 (dígitos del año). Se
MONTH usa para representar diferencia entre dos valores fecha.
INTERVAL DAY Almacena intervalos de fecha tomando días, horas,
[(precisión_días)] TO minutos y segundos. La precisión_días por defecto es 2
SECOND y acepta valores de 0 a 9. La precisión_segundos por
[(precisión_segundos)] defecto es 6 y acepta valores de 0 a 9.
9-16
Uso de TIMESTAMP
SYSDATE retorna fecha
y hora del servidor de
la base de datos, pero
no la fracción.
El campo TIMESTAMP
NO maneja zona
horaria.
9-17
Uso de TIMESTAMP WITH TIME ZONE
TIMESTAMP WITH TIME ZONE
almacena el desplazamiento, hora
en relación con el meridiano
Greenwich (UTC, Coordinated
Universal Time).
En el Ejemplo, se almacena la
hora con respecto a la zona
horaria de Bogotá (UTC -5).
9-18
Uso de TIMESTAMP WITH LOCAL TIME ZONE
9-19
Uso de INTERVAL YEAR TO MONTH
Convertir una cadena a INTERVAL, según formato
de YEAR y MONTH:
Años y meses.
Sólo años.
Sólo meses.
Meses pasados a años.
60 meses son 5 años.
9-20
Uso de función EXTRACT
Uso de función EXTRACT con tipo de dato INTERVAL.
EXTRACT(YEAR|MONTH|DAY|.. FROM expresión fecha y hora o
interval)
9-21
Restricciones
Entidad, aseguran que los datos de una tabla cumplan con
ciertas reglas.
Integridad referencial, previenen el borrado de datos de
una tabla si hay otras tablas que dependen de ella.
TIPO DESCRIPCIÓN
NOT NULL La columna no puede recibir valores nulos.
UNIQUE Los valores de la columna (o combinación de columnas)
deben ser únicos, no se pueden repetir. NOTA: NULL es
diferente de todo, hasta de NULL.
PRIMARY KEY Los valores de la columna (o combinación de columnas)
identifican cada fila de la tabla.
FOREIGN KEY Asegura una relación de dependencia entre la columna
(o combinación de columnas) con otras en otra tabla.
CHECK Una condición que deben cumplir los valores.
9-22
Recomendaciones sobre las restricciones
9-23
Definiendo restricciones
CREATE TABLE [Esquema.]Tabla (
Columna1 TipoDeDato [DEFAULT Expresión][RestricciónC]
[, Columna2 …]
[RestricciónT] [, ...]
);
9-24
Sintaxis para la definición de restricciones
Al nivel de columna
Columna TipoDato [[CONSTRAINT Nombre] Tipo,…]
Este tipo de sintaxis permite definir una restricción solo para
la columna que se esta definiendo.
Se puede utilizar para cualquier tipo de restricción, sólo si
implica una columna (la que se esta definiendo).
Al nivel de tabla
Columna, …
[[CONSTRAINT Nombre] Tipo (ColumnasT, …), …]
Esta sintaxis permite definir una restricción para una o más
columnas (separadas por comas) de la tabla.
No se puede para definir la restricción NOT NULL.
9-25
La restricción NOT NULL
9-27
La restricción UNIQUE
Se puede definir a nivel de columna o de
Restricción de unicidad para el tabla.
Crea automáticamente un índice único para la
nombre de los departamentos. restricción.
No permite tener valores duplicados en
columnas NO nulas de las columnas con
restricción de unicidad.
Si las columnas permiten valores NULL, deja
insertar varias filas con NULL en estas
columnas. (Ver Ejemplo)
Para controlar esto, colocar una restricción adicional
de NOT NULL sobre la columna o columnas.
No se permite
Si se permite
9-28
La restricción PRIMARY KEY
Restricción de llave primaria sobre Se puede definir a nivel de columna o de tabla
la columna, identifica los (llaves compuestas).
departamentos.
Sólo una llave primaria por cada tabla, pero
si varias restricciones de unicidad.
9-29
La restricción FOREIGN KEY
PRIMARY KEY en Departamentos FOREIGN KEY en Empleados
…
Establece una relación de
una o varias columnas en
una tabla, con otras de la
misma tabla o de otra tabla No se permite, El Dep_Id 50 no existe
que cuentan con una
restricción PRIMARY KEY
o UNIQUE. Si se permite, El Dep_Id 40 existe
9-30
La restricción FOREIGN KEY
Se puede definir a nivel de columna y de tabla.
Acepta valores NULL (Ver Ejemplo).
Es una restricción lógica entre los valores de las filas,
no es física (no son apuntadores).
9-31
La restricción FOREIGN KEY
[CONSTRAINT Nombre] FOREIGN KEY (Columnas)
REFERENCES TablaPadre (Columnas)
[ON DELETE [CASCADE | SET NULL] ]
FOREIGN KEY: Define las columnas en la tabla hija que deben concordar
con los valores en la tabla padre.
REFERENCES: Identifica las columnas de la tabla padre.
ON DELETE CASCADE: Cuando una fila de la tabla padre se elimina, se
eliminan automáticamente las filas relacionadas en la tabla hija.
ON DELETE SET NULL: Cuando una fila de la tabla padre se elimina, los
valores de las columnas en las filas relacionadas en la tabla hija se
modifican a NULL.
El comportamiento por defecto (llamado regla restrictiva) consiste en
deshabilitar el borrado y la modificación (de las columnas) de las
filas de la tabla padre cuando están referenciadas en la tabla hija.
9-32
La restricción CHECK
Define una condición que cada fila de la tabla debe cumplir
La condición no puede incluir:
Referencias a las seudo-columnas CURRVAL, NEXTVAL, LEVEL y ROWNUM.
Llamadas a las funciones como: SYSDATE, UID, USER.
Consultas a valores que estén en otras filas de la tabla.
Una columna puede contar con varios chequeos y estos se pueden
definir a nivel de columna o de tabla.
9-33
Violación de Restricciones
No se permite la actualización.
El departamento con código 20 tiene hijos
en la tabla empleado.
9-34
Violación de Restricciones
No se permite la eliminación.
El departamento con código 20 tiene hijos
en la tabla empleado.
9-35
Manejo de restricciones a una tabla
Por ejemplo:
ALTER TABLE Departamentos
ADD CONSTRAINT Dep_Id_Pk PRIMARY KEY (Dep_Id);
9-37
Borrar una restricción a una tabla
ALTER TABLE Tabla
DROP PRIMARY KEY | UNIQUE (Columnas) |
CONSTRAINT Nombre [CASCADE];
Por ejemplo:
ALTER TABLE Departamentos
DROP PRIMARY KEY CASCADE; //CASCADE, Elimina las restricciones FK
//que existan en otras tablas hacia esta PK
9-38
Adicionar y borrar una restricción NOT NULL
9-39
Deshabilitando restricciones
ALTER TABLE NombreTabla
DISABLE CONSTRAINT Nombre [CASCADE];
9-40
Habilitando restricciones
ALTER TABLE NombreTabla
ENABLE CONSTRAINT Nombre;
9-41
Validación de restricciones
ALTER TABLE Empleados
MODIFY CONSTRAINT Emp_Salario_Min ENABLE NOVALIDATE
9-43
Borrado de columnas y las restricciones
Ejemplos:
Borra la columna Dep_Id y las restricciones de FK y PK
que dependen de ella.
9-44
Consultar las restricciones
9-45
Consultar las columnas de una restricción
9-46
Diferir el chequeo de las restricciones
ALTER TABLE NombreTabla
MODIFY CONSTRAINT Nombre …
[NOT] DEFERRABLE [INITIALY [DEFERRED | IMMEDIATE]]
9-48
Diferir el chequeo de las restricciones
SET CONSTRAINTS Nombre_Restricción IMMEDIATE;
9-49
Crear tablas con subconsultas
CREATE TABLE [Esquema.]Tabla [(
Columna1, Columna2, … )]
AS SubConsulta;
Crea una tabla e inserta las filas que cumplen con la condición
de la subconsulta.
La definición de las columnas sólo puede tener el nombre.
Debe existir una correspondencia entre las columnas de la
tabla y la lista de columnas de la cláusula SELECT de la
subconsulta.
Si no se definen las columnas, los nombres que se toman son
los de la cláusula SELECT.
Las restricciones de integridad NO se crean en la nueva
tabla sólo los tipos de datos (sólo se crea NOT NULL).
9-50
Crear tablas con subconsultas
9-51
Creación de tablas temporales
CREATE GLOBAL TEMPORARY TABLE [Esquema.]Tabla (
Columna1 TipoDeDato [DEFAULT Expresión]
[, Columna2 …])
[ON COMMIT PRESERVE|DELETE ROWS];
9-52
La sentencia ALTER TABLE
Manejo de columnas de la tabla:
Adicionar una nueva columna.
Modificar una columna existente.
Definir un valor por defecto a una
columna.
Establecer una columna como no
usada (la tabla tiene muchas filas y se
demora el borrado, se marca como no
usada).
Borrar una columna.
Borrar las columnas que están
marcadas como no usadas (Remueve
físicamente las columnas y libera el
espacio en disco).
9-53
La sentencia ALTER TABLE
Manejo de columnas de la tabla:
Cuando se borran columnas que están marcadas como no usadas de una tabla
con muchas filas, se sugiere colocar un punto de chequeo.
Después de procesar un número especificado de filas (en este caso 250).
Realizar puntos de chequeo reduce la cantidad de undo log que se acumula
durante la operación de borrado de la columna para evitar llegar al límite del
espacio de undo disponible.
9-54
Uso de la sentencia ALTER TABLE
Al adicionar columnas:
No se puede especificar el orden de
la nueva columna
9-55
Uso de la sentencia ALTER TABLE
Al borrar columnas:
Sólo se puede borrar una columna
a la vez, a menos que se use DROP
UNUSED COLUMNS.
Al intentar borrar la columna, la
tabla debe quedar mínimo con
una columna.
Una columna que se borra no se
puede recuperar (sólo con copias
de seguridad).
Cuando se fija una columna
UNUSED se saca de uso pero no se
borra. Esta sentencia es más
rápida.
El comando DESCRIBE NO
muestra las columnas marcadas
como UNUSED.
9-56
Uso de la sentencia ALTER TABLE
Al modificar una columna se
puede:
Modificar el tipo de dato, el tamaño y
el valor por defecto (Este valor por
defecto sólo afecta las filas nuevas,
NO las existentes).
Incrementar el tamaño (precisión) de
columnas numéricas y caracteres.
Decrementar el tamaño de una
columna si la tabla no tiene filas o
todos los valores son NULL.
Cambiar el tipo de dato sólo si todos
los valores son NULL.
Convertir de CHAR a VARCHAR2 sólo si
todos los valores son NULL o si no se
cambia el tamaño.
9-57
Tabla de Sólo Lectura
Usar ALTER TABLE para colocar la tabla en modo
de sólo lectura.
Ningún cambio (DDL o DML) se puede hacer sobre la
tabla (útil para hacer mantenimiento).
9-58
Borrar una Tabla
DROP TABLE [Esquema.]Tabla [CASCADE CONSTRAINT];
9-59
Borrar una Tabla
DROP TABLE [Esquema.]Tabla PURGE;
9-60
Cambiar el nombre de una tabla o columna
RENAME NombreTabla TO NombreNuevoTabla;
9-62
Adicionando comentarios a una tabla
Estos comentarios se consultan a través de:
ALL_COL_COMMENTS
USER_COL_COMMENTS
ALL_TAB_COMMENTS
USER_TAB_COMMENTS
SELECT *
FROM USER_TAB_COMMENTS;
9-63
Quiz
9-64
Resumen
9-65
Practica 10
9-66