Вы находитесь на странице: 1из 24

Parcial II: 6

Leccin 9

Creando y Administrando Tablas


Objetivos
Al terminar este captulo, conocer lo siguiente:
Describir los principales objetos de la base de datos
Crear tablas
Describir los tipos de dato que pueden ser utilizados cuando se
especifica la definicin de una columna
Modificar la definicin de la tabla
Borrar, renombrar y truncar tablas
Objetos de la base de datos
Una base de datos de Oracle puede contener mltiples estructuras de datos.
Cada estructura puede ser esquematizada en el desarrollo de la base de datos
y creada durante la etapa de construccin de la base de datos.
Objeto
Tabla
Vista
Secuencia
ndice
Sinnimo

Descripcin
Unidad bsica de almacenamiento; compuesta por filas y
columnas
Lgicamente representa un subconjunto de datos de una o
mas tablas
Generador de valores numricos
Proporciona desempeo a algunas consultas
Nombre alternativo proporcionado a los objetos

Estructuras de las tablas en Oracle9i


Las tablas pueden ser creadas en cualquier momento, an cuando los
usuarios estn usando la base de datos.
No se necesita especificar el tamao de una tabla. El tamao es a fin de
cuentas definido por la cantidad de espacio en donde la base de datos
est localizada. Es importante, sin embargo, estimar cuanto espacio una
tabla usar con el tiempo.
La estructura de una tabla puede ser modificada en lnea
Nota: Ms objetos de la base de datos estn disponibles, pero no sern
cubiertos en este curso.
Nombrando reglas
El nombre de las tablas y columnas de la base de datos deben cumplir con las
reglas para nombrar cualquier objeto de una base de datos Oracle:
Los nombres de tablas y nombres de columnas deben iniciar con una
letra y tener de 1 a 30 caracteres de longitud.
Los nombres pueden contener solamente los siguientes caracteres
o Letras en mayscula o minscula (A-Z o a-z)
1

Parcial II: 6

Leccin 9

o Guin bajo (_)


o $
o #
No se puede duplicar el nombre de otro objeto propiedad del mismo
usuario del servidor de Oracle
Los nombres no pueden ser palabras reservadas de Oracle

Utilice nombres descriptivos para las tablas y otros objetos de la base de datos.
Nota: Los nombres no distinguen entre maysculas y minsculas. Por ejemplo,
EMPLOYEES es tratado igual que eMPloyees o eMpLOYEES.

Sentencia CREATE TABLE


Cree tablas para almacenar datos con la ejecucin de la sentencia CREATE
TABLE de SQL. Esta sentencia es una sentencia del lenguaje de definicin de
datos (DDL). Las sentencias DDL son un subconjunto de sentencias SQL
usadas para crear, modificar o eliminar estructuras de una base de datos
Oracle9i. Estas sentencias tienen un efecto inmediato en la base de datos, y en
los registros de informacin del diccionario de datos.
Para crear una tabla, el usuario debe tener el privilegio CREATE TABLE y un
rea de almacenamiento en donde se crearan los objetos. El administrador de
la base de datos utiliza sentencias del lenguaje de control de datos (DCL), que
sern cubiertas en los siguientes captulos, para otorgar privilegios a los
usuarios.

Parcial II: 6
Sintaxis
schema

Leccin 9

es igual al nombre del propietario

table

es el nombre de la tabla

DEFAULT expr

especifica un valor por defecto si el valor es omitido


en el INSERT

column

es el nombre de la columna

datatype

es el tipo de dato y longitud de la columna

Referenciando tablas de otros usuarios


Un schema es una coleccin de objetos. Los objetos de un schema son
estructuras lgicas que directamente hacen referencia con los datos en una
base de datos. Los objetos de un schema incluyen tablas, vistas, sinnimos,
secuencias, procedimientos almacenados, indices, clusters y links (ligas) a
bases de datos.
Si una tabla no pertenece al usuario, el nombre del propietario debe ser puesto
como prefijo en la tabla. Por ejemplo, si ah un esquema llamado USER_B, y
USER_B tiene una tabla EMPLOYEES, entonces especificando lo siguiente se
recuperan los datos de esta tabla:

Opcin DEFAULT
Una columna puede tomar un valor por defecto con el uso de la opcin
DEFAULT. Esta opcin previene valores nulos para columnas si una fila es
3

Parcial II: 6

Leccin 9

insertada sin valores para dichas columnas. El valor por defecto puede ser una
literal, una expresin o una funcin SQL, como SYSDATE y USER, pero el
valor no puede ser el nombre de otra columna o una pseudocolumna, como
NEXTVAL o CURRVAL. La expresin por defecto debe corresponder al tipo de
dato de la columna.
Nota:CURRVAL y NEXTVAL sern explicados despus.

Creando tablas
En el ejemplo anterior se crea la tabla DEPT, con tres columnas: DEPTNO,
DNAME y LOC. Ms adelante se confirma la creacin de la tabla con el uso
del comando DESCRIBE.
La creacin de una tabla es una sentencia DDL, un commit automtico toma
lugar cuando esta sentencia es ejecutada.

Parcial II: 6

Leccin 9

Tablas en una base de datos Oracle


Las tablas de usuario son tablas creadas por el mismo usuario, como
EMPLOYEES. Existe otra coleccin de tablas y vistas en una base de datos
Oracle conocidas como diccionario de datos (data dictionary). Esta
coleccin es creada y administrada por el servidor de Oracle y contiene
informacin acerca de la base de datos.
Todas las tablas del diccionario de datos son propiedad del usuario SYS. Las
tablas base son raramente utilizadas por los usuarios debido a que la
informacin en ellas no es fcil de entender. Por consiguiente, los usuarios
tpicamente utilizan los datos de las vistas del diccionario de datos ya que la
informacin es presentada en un formato que es fcil de entender.
La informacin almacenada en el diccionario de datos incluye nombres de los
usuarios del servidor de Oracle, privilegios otorgados a usuarios, nombres de
objetos de la base de datos, reglas de integridad de las tablas e informacin de
auditoria.
Existen 4 categoras de vistas para el diccionario de datos; cada categora tiene
distintos prefijos que reflejan la intencin de su uso.
Prefijo
USER_
ALL_
DBA_
V$

Descripcin
Estas vistas contienen informacin acerca de los objetos propiedad del
usuario
Estas vistas contienen informacin referente a todas las tablas ( tablas y
relaciones entre tablas) accesibles al usuario
Estas vistas son restringidas, las cuales pueden ser usadas solo por personas
con el rol de DBA
Estas vistas son ejecutadas dinmicamente por vistas, por el servidor de base
de datos, memoria y bloqueos

Parcial II: 6

Leccin 9

Consultando el diccionario de datos


Se pueden consultar las tablas del diccionario de datos para ver varios objetos
de la base de datos pertenecientes al usuario conectado a la base de datos.
Los datos de las tablas del diccionario de datos que frecuentemente se utilizan
son:
USER_TABLES
USER_OBJECTS
USER_CATALOG
Nota: USER_CATALOG tiene un sinnimo llamado CAT. Puedes utilizar este
sinnimo en lugar de USER_CATALOG en sentencias SQL.
SELECT
FROM

*
CAT;

Tipos de dato
Tipo de dato
VARCHAR2(size)
CHAR[(size)]
NUMBER [(p,s)]

DATE
LONG
CLOB
RAW(size)

Descripcin
Carcter de longitud variable (Un tamao debe ser especificado: Como
mnimo = 1; mximo = 4000)
Carcter de longitud fija (el valor por defecto y mnimo es 1, le valor
mximo es 2000)
Numero teniendo una precisin p y una escala s (la precisin es el
nmero total de dgitos decimales, y la escala es el nmero de dgitos a
la derecha del punto decimal; la precisin puede estar en el rango del 1
al 38 y la escala en el rango de -84 a 127)
Valores de fecha y hora entre enero 1 de 4712 A.C y Diciembre 31 de
9999 D.C.
Carcter de longitud variable por arriba de los 2 Gigabytes
Carcter de longitud variable por arriba de los 4 Gigabytes
Dato binario de longitud especificada por el argumento size (el valor
mximo es 2000)

Parcial II: 6
LONG RAW
BLOB
BFILE
ROWID

Leccin 9
Dato binario de longitud variable por arriba de 2 Gigabytes
Dato binario por arriba de los 4 Gigabytes
Dato binario almacenado en un archivo externo; arriba de 4 Gigabytes
Un nmero con base 64 representando en el sistema una direccin
nica de una fila en una tabla.

Una columna de tipo LONG no es copiada cuando una tabla es creada


usando una sub consulta.
Una columna LONG no puede ser incluida en una clusula GROUP BY
u ORDER BY.
Solo una columna LONG puede ser utilizada por tabla
Las reglas de integridad no pueden ser definidas para una columna
LONG
Se puede usar una columna CLOB antes que una columna LONG

Otros tipos de dato (DateTime)


Tipo de dato
TIMESTAMP
INTERVAL YEAR TO
MONTH
INTERVAL DAY TO
SECOND

Descripcin

Permite que el tiempo sea almacenado como una fecha con fracciones
de segundo. Se tiene diversas variaciones de este tipo de dato
Permite que el tiempo sea almacenado como un intervalo de aos y
meses. Usado para representar la diferencia entre dos valores de fecha,
donde nicamente las partes significantes son el ao y el mes
Permite que el tiempo sea almacenado como un intervalo de das a
horas, minutos y segundos. til en representaciones de diferencias
precisas entre dos valores de tipo fecha

Tipos de dato (DateTime)

La precisin en fracciones de segundo (fraccional_seconds_precision)


opcionalmente especifica el nmero de dgitos en la parte fraccional del
SEGUNDO en un campo de tipo fecha y puede ser un nmero en el rango de 0
a 9. El valor por defecto es 6.
Ejemplo

Parcial II: 6

Leccin 9

En el ejemplo anterior, creamos la tabla NEW_EMPLOYEES con una columna


start_date y un tipo de dato TIMESTAMP. La precisin de 7 indica la precisin
en fracciones de segundo el cual si no es especificado ser 6 por defecto.
Asumiendo que dos filas son insertadas en la tabla NEW_EMPLOYEES.
Podemos ver las diferencias a continuacin. (Un tipo de dato DATE por defecto
despliega los resultados en el formato DD-MON-RR):

Tipo de dato TIMESTAMP WITH TIME ZONE

UTC representa la Hora Universal Coordinada (Cordinated Universal Time)formalmente Meridiano de Greenwich. Dos valores TIMESTAMP WITH TIME
ZONE son considerados idnticos si ellos representan el mismo instante en
UTC, independientemente del TIME ZONE almacenado en el dato.
Puesto que TIMESTAMP WITH TIME ZONE puede adems almacenar
informacin de la zona horaria, esta particularidad es apropiada para
almacenar informacin de fechas que pueden ser obtenidas a travs de
regiones geogrficas.
Por ejemplo:
TIMESTAMP

1999-04-15 8:00:00 -8:00

Es igual que
TIMESTAMP

1999-04-15 11:00:00 -5:00

Esto es, 8:00 A.M. tiempo estndar del pacifico es igual a 11:00 A.M. tiempo
estndar del Este.
Esto tambin puede ser representado como
TIMESTAMP

1999-04-15 8:00:00 US/Pacific

Nota: fractional_seconds_precision opcionalmente especifica en nmero de


dgitos en la parte fraccional de los segundos y puede ser un nmero en el
rango de 0 al 9. El valor por defecto es 6.

Parcial II: 6

Leccin 9

Tipo de dato TIMESTAMP WITH LOCAL TIME

Diferente a TIMESTAMP WITH TIME ZONE, se pueden especificar columnas


de tipo TIMESTAMP WITH LOCAL TIME ZONE como parte de una llave
primaria o nica. El desplazamiento en la zona del tiempo es la diferencia (en
horas y minutos) entre la hora local y UTC. All no hay literales para
TIMESTAMP WITH LOCAL TIME ZONE.
Nota: fractional_seconds_precision opcionalmente especifica en nmero de
dgitos en la parte fraccional de los segundos y puede ser un nmero en el
rango de 0 al 9. El valor por defecto es 6.
Ejemplo:

El tipo TIMESTAMP WITH LOCAL TIME ZONE es apropiado para dos


aplicaciones que quieras que muestren fechas y horas usando la zona horaria
del sistema del cliente.

Parcial II: 6

Leccin 9

Tipo de dato INTERVAL YEAR TO MONTH


INTERNAL YEAR TO MONTH almacena un periodo de tiempo utilizando el ao
y mes de campos de tipo fecha. Use INTERVAL YEAR TO MONTH para
representar la diferencia entre dos valores de tipo fecha, donde nicamente las
partes significativas son el ao y el mes. Por ejemplo, se puede usar este valor
para establecer un recordatorio para una fecha 120 meses en el futuro o
verificar si han pasado 6 meses desde una fecha en particular.
Especifique INTERVAL YEAR TO MONTH como sigue:
INTERVAL YEAR [(year_precision)] TO MONTH
Donde:
year_precision

es el nmero de dgitos del ao. El valor por defecto


de year_precision es 2.

Ejemplo:

10

Parcial II: 6

Leccin 9

Tipo de dato INTERVAL DAY TO SECOND


INTERVAL DAY TO SECOND almacena un periodo de tiempo en trminos de
das, horas, minutos y segundos. Utilice INTERVAL DAY TO SECOND para
representar la diferencia precisa entre dos valores de tipo fecha. Por ejemplo,
se puede usar este valor para ser recordado 36 horas despus, o para registrar
el tiempo entre el inicio y fin de una carrera. Para representar largos intervalos
de tiempo, incluyendo mltiples aos, con alta precisin, se puede usar un
valor grande para las porciones de das.
Especifique INTERVAL DAY TO SECOND como sigue:

Donde:
day_precision

fraccional_seconds_precision

es el nmero de dgitos de da en un
campo tipo fecha.
Los valores
aceptados son del 0 al 9. El valor por
defecto es 2.
es el nmero de dgitos en la parte
fraccional de segundos en el campo de
tipo fecha. Los valores aceptados son
del 0 al 9. El valor por defecto es 6.

11

Parcial II: 6

Leccin 9

Ejemplo:

12

Parcial II: 6

Leccin 9

Creando una tabla a partir de las filas de otra tabla


Un segundo mtodo para la creacin de una tabla es aplicar las clusula AS
subquery, el cual crea la tabla e inserta las filas obtenidas por la sub consulta.
Sintaxis:
table
column
subquery

es el nombre de la tabla
es el nombre de la columna, el valor por defecto y las
reglas de integridad
es la sentencia SELECT que define el conjunto de filas que
sern insertadas en la nueva tabla

Normas a seguir
La tabla es creada con los nombres de columnas especificados y las
filas recuperadas por la sentencia SELECT son insertadas en la tabla.
La definicin de columnas puede contener solo nombre de columnas y
valores por defecto.
Si las especificaciones de la columna se dan, el nmero de columnas
debe ser igual al nmero de columnas especificadas en la lista SELECT
de la sub consulta.
Si las especificaciones de la columna no se dan, el nombre de la
columna en la tabla ser igual que el nombre de la columna en la sub
consulta.
Las reglas de integridad no son pasadas a la nueva tabla, nicamente
son pasadas las definiciones del tipo de dato.

13

Parcial II: 6

Leccin 9

En el ejemplo anterior se crea una tabla llamada DEPT80, que contiene los
detalles de todos los empleados trabajando en el departamento 80. Note que
los datos para la tabla DEPT80 provienen de la tabla EMPLOYEES.
Se puede verificar la existencia de la tabla en la base de datos y verificar las
definiciones con el uso del comando DESCRIBE de iSQL*Plus.
Asegrese de proporcionar un alias de columna cuando seleccione una
expresin. A la expresin SALARY * 12 se le proporciona el alias ANNSAL. Sin
el alias, el siguiente error es generado:

Sentencia ALTER TABLE


Despus que ha creado una tabla, puede necesitar cambiar la estructura de la
tabla puesto que: ha omitido una columna, la definicin de alguna columna
necesita ser cambiada, o necesitas eliminar columnas. Todo lo anterior se
puede realizar por medio de la sentencia ALTER TABLE.

14

Parcial II: 6

Leccin 9

Se puede aadir, modificar y borrar columnas de una tabla utilizando la


sentencia ALTER TABLE.
Sintaxis:
table
ADD | MODIFY | DROP
column
datatype
DEFAULT expr

es el nombre de la tabla
es el tipo de modificacin
es el nombre de la nueva columna
es el tipo de dato y longitud de la nueva
columna
especifica el valor por defecto de la
nueva columna

Nota: En el ejemplo se proporciona un resumen de la sintaxis para la sentencia


ALTER TABLE. Ms acerca de esta sentencia ser vista en los siguientes
captulos.

15

Parcial II: 6

Leccin 9

Aadiendo columnas
En la imagen se aade la columna JOB_ID a la tabla DEPTO80. Note que la
nueva columna se pone como ultima columna de la tabla.

Reglas para agregar columnas


Se pueden aadir o modificar columnas
No se puede especificar el lugar donde aparecer la columna. La nueva
columna ser siempre la ltima.

16

Parcial II: 6

Leccin 9

En el ejemplo se aade una columna llamada JOB_ID a la tabla DEPT80. La


columna JOB_ID se establece como ultima columna de la tabla.
Nota: si una tabla contiene filas cuando una columna es agregada, entonces la
nueva columna es iniciada con un valor nulo para todas las filas.

Modificando una columna


Se puede modificar la definicin de una columna con el uso de la sentencia
ALTER TABLE con la clusula MODIFY. Las modificaciones a las columnas
pueden incluir cambios al tipo de dato, tamao y valor por defecto.
Reglas
Se puede incrementar el tamao o precisin de una columna numrica
Se puede incrementar el tamao de columnas numricas o carcter
Se puede decrementar el tamao de una columna solo si la columna
contiene valores nulos o si la tabla no tiene filas
Se puede cambiar el tipo de dato solo si las columnas tienen valores
nulos
Se puede convertir una columna con el tipo de dato CHAR a
VARCHAR2 o convertir una columna VARCHAR2 a CHAR solo si las
columnas contienen valores nulos o si no cambia su tamao
El cambio del valor por defecto de una columna afecta nicamente a las
subsecuentes inserciones a la tabla

17

Parcial II: 6

Leccin 9

Eliminando una columna


Se puede eliminar una columna de una tabla con el uso de la sentencia ALTER
TABLE con la clusula DROP COLUMN. Esta es una caracterstica disponible
desde Oracle8i.
Reglas
La columna puede o no contener datos
Utilizando la sentencia ALTER TABLE, solamente una columna puede
ser eliminada a la vez
La tabla deber contener al menos una columna despus de ser
modificada
Una vez que la columna es eliminada, no puede ser recuperada

18

Parcial II: 6

Leccin 9

Opcin SET UNUSED


La opcin SET UNUSED marca una o ms columnas como no usadas de tal
manera que pueden ser borradas cuando la demanda en recursos del sistema
sea baja. Esta caracterstica esta disponible desde Oracle8i. Especificar esta
clusula no quita realmente las columnas de la tabla (esto es, que no se
restablece el espacio en disco usado por estas columnas). Por consiguiente, el
tiempo de respuesta es mayor que si se ejecuta la clusula DROP. Las
columnas UNUSED son tratadas como si fuesen borradas, aunque sus datos
permanecen en las filas de la tabla. Despus de que una columna ha sido
marcada como UNUSED, no se tiene acceso a la misma. Una consulta
SELECT * no obtendr los datos de las columnas UNUSED. Adems, los
nombres y tipos de columnas marcados como UNUSED no sern mostrados al
usar el comando DESCRIBE y no podr aadir a la tabla nuevas columnas con
el mismo nombre de alguna columna UNUSED. La informacin SET UNUSED
es
almacenada
en
la
vista
del
diccionario
de
datos
USER_UNUSED_COL_TABS.
Opcin DROP UNUSED COLUMNS
DROP UNUSED COLUMNS remueve de la tabla todas las columnas
actualmente marcadas como UNUSED. Se puede usar esta sentencia cuando
quieras reclamar el espacio extra del disco que utilizan las columnas UNUSED
de la tabla. Si la tabla no contiene columnas UNUSED, la sentencia no muestra
ningn error.

19

Parcial II: 6

Leccin 9

Eliminado una tabla


La sentencia DROP TABLE remueve la definicin de una tabla de Oracle.
Cuando se elimina una tabla, la base de datos pierde todos los datos de la
tabla y todos los ndices asociados a ella.
Sintaxis
DROP TABLE table;
Donde:
table

es el nombre de la tabla

Reglas
Todos los datos son borrados de la tabla
Cualquier vista y sinnimo que haga referencia a la tabla, permanece
pero son invlidos
Cualquier transaccin pendiente es cometida
Solo el creador de la tabla o un usuario con privilegios DROP ANY
TABLE puede eliminar la tabla
Nota: La sentencia DROP TABLE, una vez ejecutada, no se puede revertir su
resultado. El servidor de Oracle no cuestiona la accin cuando se utiliza la
sentencia DROP TABLE. Si eres dueo de la tabla o tienes un nivel alto de
20

Parcial II: 6

Leccin 9

privilegios, entonces la tabla es inmediatamente eliminada. Como con todas las


sentencias DDL, DROP TABLE es cometida automticamente.

Renombrando una tabla


Las sentencias DDL incluyen la sentencia RENAME, que es usada para
renombrar tablas, vistas, secuencias o sinnimos.
Sintaxis
RENAME

old_name

TO

new_name;

Donde:
old_name

es el nombre de la tabla, vista, secuencia o sinnimo


a renombrar

new_name

es el nuevo nombre de la tabla, vista, secuencia o


sinnimo

Se debe ser dueo del objeto a renombrar.

21

Parcial II: 6

Leccin 9

Truncando una tabla


Otra de las sentencias DDL es la sentencia TRUNCATE TABLE, que es
utilizada para remover todas las filas de una tabla y liberar el espacio de
almacenamiento usado por esa tabla. Cuando se usa la sentencia TRUNCATE
TABLE, no se pueden deshacer los cambios.
Sintaxis
TRUNCATE TABLE

table;

Donde:
table

es el nombre de la tabla

Se debe ser el dueo de la tabla o tener privilegios de sistema DELETE TABLE


para truncar una tabla.
La sentencia DELETE tambin puede eliminar todas las filas de la tabla, pero
esta sentencia no libera el espacio almacenado.
La sentencia TRUNCATE es ms rpida. Remover filas con la sentencia
TRUNCATE es ms rpido que remover estas con la sentencia DELETE por
las siguientes razones:
La sentencia TRUNCATE es una sentencia del lenguaje de definicin de
datos (DDL) y no genera informacin de transacciones (rollback)
Truncar una tabla no dispara los TRIGGERS de tipo DELETE de la tabla
Si la tabla es padre de una restriccin de integridad referencial
(constraint), no se puede truncar la tabla. Deshabilite la restriccin
(constraint) antes de usar la sentencia TRUNCATE.

22

Parcial II: 6

Leccin 9

Aadiendo comentarios a una tabla


Se pueden aadir comentarios de hasta 2,000 bytes aproximadamente a
columnas, tablas, vistas o snapshot con el uso de la sentencia COMMENT. El
comentario es almacenado en el diccionario de datos y puede ser visto en una
de las siguientes vistas del diccionario de datos en la columna COMMENTS:
ALL_COL_COMMENTS
USER_COL_COMMENTS
ALL_TAB_COMMENTS
USER_TAB_COMMENTS
Sintaxis
COMMENT ON TABLE table | COLUMN table.column
IS
text;
Donde:
table
column
text

es el nombre de la tabla
es el nombre de la columna en la tabla
es el texto del comentario

Se pueden borrar un comentario de la base de datos poniendo como texto una


cadena vaca ():
COMMENT ON TABLE employees IS ;

23

Parcial II: 6

Leccin 9

Resumen
En este captulo se ha visto como usar sentencias DDL para crear, modificar,
borrar y renombrar tablas. Tambin se ha visto como truncar una tabla y aadir
comentarios.
CREATE TABLE
Crea una tabla
Crea una tabla basndose en otra con el uso de una sub consulta.
ALTER TABLE
Modifica la estructura de una tabla
Cambia el tamao de columnas, cambia el tipo de dato y aade
columnas
DROP TABLE
Remueve las filas y la estructura de una tabla
Una vez ejecutada, esta sentencia no puede ser deshecha
RENAME
Renombra una tabla, vista, secuencia o sinnimo
TRUNCATE
Remueve todas las filas de una tabla y libera el espacio usado por la
misma
La sentencia DELETE remueve solo las filas
COMMENT
Aade un comentario a una tabla o columna
Consulte en las vistas del diccionario de datos los comentarios

24