Está en la página 1de 39

Creando y Manejando Tablas

Copyright © EDCON Tecnologías de Información, 2008.


Objetivos

Al completar esta lección podrá realizar lo siguiente:

• Describir los objetos principales de la base de


datos
• Crear tablas
• Describir los tipos de datos que puedan ser
usados cuando se especifica la definición de
columna
• Describir como trabajan los objetos del esquema
• Como se crean las restricciones en cuando la
tabla se crea.

9-2
Objetos de la Base de Datos

Objeto Descripción
Tabla Unidad básica de almacenamiento;
compuesta de registros y columnas

Vista Representación lógica de datos de una o


más tablas

Secuencia Generador de Valores Numéricos


Índice Mejora el funcionamiento de algunas
consultas
Sinónimos Proporciona nombres alternativos a objetos

9-3
Reglas de Nomenclatura

Nombres de Tablas y Columnas:


• Deben empezar con una letra
• Deben tener de una longitud de 1 a 30 caracteres
• Deben contener solamente A–Z, a–z, 0–9, _, $, y #
• No deben duplicarse los nombres de los objetos
que pertenecen al mismo usuario
• No deben ser palabras reservadas del servidor
Oracle

9-4
La sentencia CREATE TABLE

• Se debe tener :
– Privilegio de CREATE TABLE
– Un área de almacenamiento
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr][, ...]);

• Se debe especificar:
– El nombre de la tabla
– Nombre, tipo de dato y tamaño de la columna

9-5
Haciendo referencia a
tablas de otros Usuarios

• Las tablas pertenecientes a otros usuarios no


están en el esquema de su usuario.
• Se debe usar el nombre del propietario como
prefijo para sus tablas.

USERA USERB
SELECT * SELECT *
FROM userB.employees; FROM userA.employees;

9-6
La opción DEFAULT
• Específica un valor por defecto para una columna
durante un INSERT.

... hire_date DATE DEFAULT SYSDATE, ...

• Valores literales, expresiones, o funciones de SQL


son valores legales.
• Otro nombre de columna o pseudocolumna son
valores ilegales.
• El tipo de datos por defecto debe corresponder al
tipo de dato de la columna.
CREATE TABLE hire_dates
(id NUMBER(8),
hire_date DATE DEFAULT SYSDATE);
Table created.

9-7
Creando Tablas

• Crear la Tabla.
CREATE TABLE dept
(deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13),
create_date DATE DEFAULT SYSDATE);
Table created.

• Confirmar la creación de la tabla.


DESCRIBE dept

9-8
Tablas en la BD de Oracle

• Tablas de Usuario:
– Son una colección de tablas creadas y mantenidas
por el usuario
– Contienen información del usuario
• Diccionario de Datos:
– Es una colección de tablas creadas y mantenidas
por el servidor de Oracle
– Contienen información de la base de datos

9-9
Tipos de Datos
Tipos de Datos Descripción
VARCHAR2(size) Tipo Carácter de tamaño variable
CHAR(size) Tipo Carácter de tamaño fijo
NUMBER(p,s) Tipo numérico de tamaño variable
DATE Valores Tipo Fecha y hora
LONG Tipo Carácter de tamaño variable de
hasta 2 gigabytes
CLOB Tipo Carácter de hasta de 4
gigabytes
RAW y LONG RAW Dato Binario de Registro
BLOB Dato Binario de hasta 4 gigabytes
BFILE Dato Binario almacenado en un archivo
externo; de hasta 4 gigabytes
ROWID Número de sistema en base 64 que
representa la dirección única de un
registro en la tabla.

9-10
Tipo de datos Fecha Hora

Tipo de Dato Descripción


TIMESTAMP Fecha con fracción de segundos.
INTERVAL YEAR TO Almancenado como un intervalo de
MONTH años y meses
INTERVAL DAY TO Almacenado como un intervalo de
SECOND dias, horas, minutos y segundos

9-12
Tipo de datos Fecha Hora

• El tipo de dato TIMESTAMP es una extensión de el


tipo de dato DATE.
• Almacena el año, mes y día del tipo de dato DATE
más los valores de la hora, minuto, y segundos así
como la fracción de segundos.
• El tipo de dato TIMESTAMP es especificado por:

TIMESTAMP[(fractional_seconds_precision)]

9-13
Tipo de Dato TIMESTAMP WITH TIME ZONE

• TIMESTAMP WITH TIME ZONE es una variante de


TIMESTAMP que incluye el desplazamiento de la
zona horaria en su valor.
• El desplazamiento de la zona horaria es la
diferencia, en horas y minutos, entre la hora local
y la UTC (Universal Time Coordinate, también
conocida como Greenwich Mean Time).

TIMESTAMP[(fractional_seconds_precision)]
WITH TIME ZONE

9-14
Tipo de Dato TIMESTAMP WITH LOCAL TIME

• TIMESTAMP WITH LOCAL TIME ZONE es otra


variante de TIMESTAMP que incluye el
desplazamiento de la zona horaria en su valor.
• Los datos almacenados en la BD son
normalizados a la zona horaria de la BD.
• El desplazamiento de la zona horaria no es
almacenada como parte de la columna de datos;
Oracle retorna el dato en la sesión local de la zona
horaria del usuario
• TIMESTAMP WITH LOCAL TIME ZONE es
especificado por:
TIMESTAMP[(fractional_seconds_precision)]
WITH LOCAL TIME ZONE

9-15
Tipo de Dato INTERVAL YEAR TO MONTH

• INTERVAL YEAR TO MONTH almacena un periodo de


tiempo usando los campos YEAR y MONTH de la
fecha hora.
INTERVAL YEAR [(year_precision)] TO MONTH

INTERVAL '123-2' YEAR(3) TO MONTH


Indica un intervalo de 123 años, 2 meses.

INTERVAL '123' YEAR(3)


Indica un intervalo de 123 años 0 meses.

INTERVAL '300' MONTH(3)


Indica un intervalo de 300 meses.

INTERVAL '123' YEAR


Regresa un error, porque la precisión por default es de 2,
y '123‘ tiene 3 digitos.

9-16
Tipo de Dato INTERVAL DAY TO SECOND
• INTERVAL DAY TO SECOND almacena un periodo
de tiempo en termino de días, horas, minutos y
segundos.
INTERVAL DAY [(day_precision)]
TO SECOND [(fractional_seconds_precision)]

INTERVAL '4 5:12:10.222' DAY TO SECOND(3)


Indica 4 días, 5 horas, 12 minutos, 10 segundos,
and 222 milésimas de un segundo.

INTERVAL '180' DAY(3)


Indica 180 días.

INTERVAL '4 5:12' DAY TO MINUTE


Indica 4 dias, 5 horas, y 12 minutos

INTERVAL '400 5' DAY(3) TO HOUR


Indica 400 días y 5 horas.

9-17
Incluyendo Restricciones
(Constraints
Constraints))

• Las restricciones implementan reglas a nivel de tabla.


• Las restricciones previenen el borrado de una tabla si
existen dependencias.
• Los siguiente tipos de restricciones son validos:
– NOT NULL
– UNIQUE
– PRIMARY KEY
– FOREIGN KEY
– CHECK

9-18
Directrices de las Restricciones

• Se puede nombrar una restricción, o el servidor de


Oracle generara un nombre con el formato
SYS_Cn
• Se puede generar una restricción en:
– Al tiempo que se crea la tabla
– Después que la tabla haya sido creada.
• Las restricciones pueden ser creadas a nivel tabla
o nivel columna.
• La información de la restricción se almacena en el
diccionario de datos.

9-19
Definiendo Restricciones
Sintaxis:
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr]
[column_constraint],
...
[table_constraint][,...]);

Restricción a nivel columna:


column [CONSTRAINT constraint_name] constraint_type,

Restricción a nivel tabla:


column,...
[CONSTRAINT constraint_name] constraint_type
(column, ...),

9-20
Definiendo Restricciones

– Restricción a nivel columna:


CREATE TABLE employees(
employee_id NUMBER(6)
CONSTRAINT emp_emp_id_pk PRIMARY KEY, 1
first_name VARCHAR2(20),
...);
– Restricción a nivel tabla:
CREATE TABLE employees(
employee_id NUMBER(6),
first_name VARCHAR2(20),
...
job_id VARCHAR2(10) NOT NULL,
2
CONSTRAINT emp_emp_id_pk
PRIMARY KEY (EMPLOYEE_ID));

9-21
La restricción NOT NULL

Esta definida a nivel de columna:


CREATE TABLE employees(
employee_id NUMBER(6),
last_name VARCHAR2(25) NOT NULL, Nombrada
salary NUMBER(8,2), por el
Sistema
commission_pct NUMBER(2,2),
hire_date DATE
CONSTRAINT emp_hire_date_nn Nombrada
NOT NULL, por el
usuario
...

9-22
La restricción NOT NULL

Garantiza que los valores nulos no sean permitidos


en la columna:

Restricción NOT Restricción Ausencia de


NULL (Ningún registro NOT NULL Restricción NOT NULL
puede contener un (Cualquier registro
valor nulo para esta puede contener nulos
columna.) para esta columna.)

9-23
La restricción UNIQUE

Restricción UNIQUE
EMPLOYEES


INSERT INTO

Permitida
No permitida:
ya existe

9-24
La restricción UNIQUE

Se define en cualquiera de los niveles ya sea de tabla o de


columna:
CREATE TABLE employees(
employee_id NUMBER(6),
last_name VARCHAR2(25) NOT NULL,
email VARCHAR2(25),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE NOT NULL,
...
CONSTRAINT emp_email_uk UNIQUE(email));

9-25
La restricción PRIMARY KEY

Definir en cualquiera de los niveles ya sea de tabla o de


columna:
CREATE TABLE departments(
department_id NUMBER(4),
department_name VARCHAR2(30)
CONSTRAINT dept_name_nn NOT NULL,
manager_id NUMBER(6),
location_id NUMBER(4),
CONSTRAINT dept_id_pk PRIMARY KEY(department_id));

9-26
La restricción PRIMARY KEY

DEPARTMENTS
PRIMARY KEY

No permitido INSERT INTO


(Valor Nulo)

No permitido
(Ya existe el 50)

9-27
La restricción FOREIGN KEY
DEPARTMENTS

PRIMARY
KEY

EMPLOYEES
FOREIGN
KEY

… No permitido
INSERT INTO (9 No Existe)

Permitido

9-28
La restricción FOREIGN KEY

Definir en cualquiera de los niveles ya sea de tabla o


de columna:
CREATE TABLE employees(
employee_id NUMBER(6),
last_name VARCHAR2(25) NOT NULL,
email VARCHAR2(25),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE NOT NULL,
...
department_id NUMBER(4),
CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
REFERENCES departments(department_id),
CONSTRAINT emp_email_uk UNIQUE(email));

9-29
Palabras Clave de la
restricción FOREIGN KEY

• FOREIGN KEY: Define la columna en la tabla hijo a


nivel de restricción de tabla
• REFERENCES: Identifica la tabla y columna en la
tabla padre
• ON DELETE CASCADE: Borra los registros
dependientes en la tabla hijo cuando un registro en
la tabla padre es borrado.
• ON DELETE SET NULL: Convierte llaves foraneas
dependientes a nulos

9-30
La restricción CHECK

• Define una condición que cada registro debe satisfacer


• Las siguientes expresiones no son permitidas:
– Referencias a pseudocolumnas CURRVAL, NEXTVAL,
LEVEL, y ROWNUM
– Llamadas a funciones SYSDATE, UID, USER, y USERENV
– Búsquedas que hagan referencia a valores en otros
registros
..., salary NUMBER(2)
CONSTRAINT emp_salary_min
CHECK (salary > 0),...

9-31
CREATE TABLE: Ejemplo
CREATE TABLE employees
( employee_id NUMBER(6)
CONSTRAINT emp_employee_id PRIMARY KEY
, first_name VARCHAR2(20)
, last_name VARCHAR2(25)
CONSTRAINT emp_last_name_nn NOT NULL
, email VARCHAR2(25)
CONSTRAINT emp_email_nn NOT NULL
CONSTRAINT emp_email_uk UNIQUE
, phone_number VARCHAR2(20)
, hire_date DATE
CONSTRAINT emp_hire_date_nn NOT NULL
, job_id VARCHAR2(10)
CONSTRAINT emp_job_nn NOT NULL
, salary NUMBER(8,2)
CONSTRAINT emp_salary_ck CHECK (salary>0)
, commission_pct NUMBER(2,2)
, manager_id NUMBER(6)
, department_id NUMBER(4)
CONSTRAINT emp_dept_fk REFERENCES
departments (department_id));

9-32
Violando Constraints

UPDATE employees
SET department_id = 55
WHERE department_id = 110;

UPDATE employees
*
ERROR at line 1:
ORA-02291: integrity constraint (HR.EMP_DEPT_FK)
violated - parent key not found

9-33
Violando Constraints

• Oracle no te permite eliminar un registro que contenga


una llave primaria que sea usada como llave foranea
en otra tabla.
DELETE FROM departments
WHERE department_id = 60;

DELETE FROM departments


*
ERROR at line 1:
ORA-02292: integrity constraint (HR.EMP_DEPT_FK)
violated - child record found

9-34
Creando una Tabla
Usando la Sintaxis de una Subconsulta

• Crear una tabla e insertar registros combinando la


sentencia CREATE TABLE y la opción AS subquery.
CREATE TABLE table
[(column, column...)]
AS subquery;

• Corresponder el numero de columnas especificadas


en la tabla al numero de columnas del subquery.
• Definir columnas con nombres de columnas y
valores por defecto.

9-35
Creando una Tabla Usando una
Subconsulta
CREATE TABLE dept80
AS
SELECT employee_id, last_name,
salary*12 ANNSAL,
hire_date
FROM employees
WHERE department_id = 80;
Table created.
DESCRIBE dept80

9-36
La sentencia ALTER TABLE

Usar la sentencia ALTER TABLE para:


• Agregar una nueva columna
• Modificar una columna existente
• Definir un valor por defecto para la nueva columna
• Eliminar una columna
• Agregar, eliminar, activar o desactivar una
restricción

9-37
Eliminando una Tabla

• Todos los datos y la estructura en la tabla son


borrados.
• Toda transacción pendiente es “committed”.
• Todos los índices son eliminados.
• No se puede realizar un “rollback” a la sentencia
DROP TABLE.
DROP TABLE dept80;
Table dropped.

9-38
Resumen

• En esta leccion, se habra aprendido como usar la


sentencia CREATE TABLE para crear tablas y
restricciones.
– Describir los objetos principales de la base de
datos
– Repaso de la estructura de una tabla
– Listar los tipos de datos disponibles para las
columnas de una tabla
– Creat una tabla sencilla
– Explicar como son creadas las restricciones al
mismo tiempo que la creacion de la tabla
– Describir como trabajan los objetos del esquema.

9-39
Practica 9 Visión General

Esta practica cubre los siguientes temas:


• Creación de nuevas tablas
• Creación de una tabla usando la sintaxis CREATE
TABLE AS
• Verificación de que la tabla exista
• Eliminando Tablas

9-40

También podría gustarte