Vous êtes sur la page 1sur 114

CAPITULO

INTRODUCCIN A LA ARQUITECTURA DE ORACLE 1


EL PRESENTE TEXTO ES UN BORRADOR.... !

INTRODUCCION.
Cada versin de oracle que sale al mercado, adiciona o modifica
caractersticas a las ya existentes. En la versin 9i, se
adicionaron muchas caractersticas nuevas y se cambiaron muchas
funciones.
Para comprender la arquitectura de Oracle, es importante conocer
dos conceptos que son fundamentales: Bases de datos e
instancias.
Bases de datos.- Una base de datos es un conjunto de
datos.Oracle proporciona la capacidad de almacenarlos y de
acceder a ellos de una forma coherente con un modelo
definido y conocido como el modelo Relacional. Debido a
esto, Oracle construye lo que se conoce como un Sistema de
Gestin de Bases de Datos Relacional (RDBMS). Cuando
hablamos de Bases de Datos no solo nos estamos refiriendo a
los datos fsicos, sino tambin a la combinacin de objetos
fsicos, de memoria y de proceso.
Los datos de una base de datos se almacenan en tablas. Las
tablas relacionales estn definidas por sus columnas o
atributos, al que se les asigna un nombre. Los datos se
almacenan como filas o registros en una tabla. Las tablas
pueden estar relacionadas entre s y base de datos puede
utilizarse para que se apliquen esas relaciones.
Adems datos en formato relacional, Oracle (a partir de
Oracle8) admite estructuras orientadas a objetos(OO), como
mtodos o tipos abstractos de datos. Los objetos pueden
estar relacionados con otros objetos y conocer otros
objetos.
Tanto si maneja estructuras relacionales o estructuras datos
orientadas a objetos, Oracle los almacena los datos como
archivos. Internamente existen estructuras de archivos los

Lic. Octavio Aguilar M. 1


que permite almacenar por separados diferentes tipos de
datos. A estas divisiones lgicas se denominan espacios de
tablas.
Espacios de tablas.-Un espacio de tablas es una divisin
lgica de una base de datos, todas las bases de datos que se
instalan constan al menos con espacio de tablas (por defecto
espacio de tablas SYSTEM). Se pueden utilizar o crear otros
espacios de tablas para agrupar tablas que traten de un tema
especial, por ejemplo: Para un Sistema Integrado de
contabilidad y ventas, se podra crear espacios de tablas
llamados contabilidad, ventas e ndices, y cada uno contener
tablas u objetos que corresponden a la misma rea, esto no
quiere decir que cada espacio de tablas conforman diferentes
bases de datos, mas al contrario todos los espacios de
tablas se encuentran en una misma base de datos.
Cada espacio de tablas esta conformado por uno o ms
archivos de datos que se almacenan en disco, bsicamente
estos almacenan todas la informacin de un espacio de
tablas. Un archivo de datos solo puede pertenecer a un nico
espacio de tablas.
Los archivos de datos como se acaba de describir
proporcionan el almacenamiento fsico de los datos de la
base de datos.
Los siguientes archivos estn relacionados con la base de
datos: Los registros de construccin, los archivos de
control, los archivos de traza y el registro de alertas.
Los archivos de reconstruccin.-Oracle conserva
registros de todas las transacciones realizadas en la base
de datos. Estas transacciones se registran en archivos
denominados archivos de registros de reconstruccin en
lnea, estos se utilizan para recuperar las transacciones de
la base de datos en el orden adecuado en caso de que se
produzca alguna falla en la base de datos.
Archivos de Control.-La estructura fsica global de una base
de datos se mantiene por medio de sus archivos de control,
en los que se registra la informacin de control referente a
todos los archivos de la base de datos. Se utilizan para

Lic. Octavio Aguilar M. 2


conservar la coherencia interna y guiar las operaciones de
recuperacin.
Archivos de traza y registro de alertas.-Todos los procesos
asociados a una instancia que se ejecutan en segundo plano
tienen a su vez un archivo de traza asociado. El archivo de
traza contiene informacin relativa a los sucesos
significativos con los que se encuentran dichos procesos.
Los archivos de registro de alertas corresponden a los
sucesos ms importantes que ocurren en la vida de una base
de datos.
Instancias.-Para acceder a los datos de la base de datos,
Oracle utiliza un conjunto de procesos en segundo plano que
comparten todos los usuarios. Adems, existen estructuras de
memoria(conocidos como SGA) que sirven para almacenar los
datos de la base de datos que se ha consultado mas
recientemente.
Una instancia de base de datos(conocida tambin como
servidor) es un conjunto de estructuras de memoria y
procesos en segundo plano que acceden a un conjunto de
archivos de una base de datos.

Lic. Octavio Aguilar M. 3


CAPITULO
INSTALACIN DE ORACLE 9I EN LINUX REDHAT 9 2
INTRODUCCION.
Para instalar Oracle 9i sobre la plataforma Linux RedHat 9, se
debe conseguir un ejemplar del instalador de Oracle 9i para
Linux. Los instaladores vienen en 3 CDS:
lnx_920_disk1.cpio.gz
lnx_920_disk2.cpio.gz
lnx_920_disk3.cpio.gz
Se deben descomprimir y desempaquetar estos archivos en caso de
no haber generado los instaladores. Antes deber crear un
usuario Oracle de la siguiente forma:
]#useradd oracle
Automticamente se crea un directorio llamado oracle que esta
dentro de /home, se almacenaran los tres instaladores de Oracle
en este directorio para luego ejecutar la descompresin y
desempaquetado.
Para descomprimir ejecutar:
]#gunzip lnx_920_disk1.cpio.gz
]#gunzip lnx_920_disk2.cpio.gz
]#gunzip lnx_920_disk3.cpio.gz

Para Desempaquetar ejecutar:


]#cpio -idmv < lnx_920_disk1.cpio
]#cpio -idmv < lnx_920_disk2.cpio
]#cpio -idmv < lnx_920_disk3.cpio
Una vez realizados estas operaciones se deberan obtener 3
directorios que contienen los instaladores: Disk1, Disk2, Disk3.
CONFIGURACIN.
Configurando el espacio del Swap.-Se
aconseja que para
instalar Oracle 9i y obtener un rendimiento normal, se tenga
mismamente 512 MB de RAM para el servidor de Oracle 9i, aunque
se instalo sin problemas en maquinas con 512 de RAM, cabe hacer

Lic. Octavio Aguilar M. 4


notar tambin que el rendimiento de Oracle 9i en rpido que
instalado en plataformas Windows.
#Para verificar y ver el espacio de Swap, ejecutar:
]#cat /proc/swaps
Configurando la Memoria compartida(Shared Memory).-
Al instalar Oracle 9i en linux se aconseja que se tenga el
mximo tamao de memoria compartida, si no se cuenta con lo
aconsejado usted al momento de finalizar la instalacin, cuando
se esta montando la base de datos, obtendr este error:
ORA-27123:unable to attach to shared memory segment.
Entonces se deber modificar el shared memory o memoria
compartida, usar los siguientes comandos de la Figura 2.0:

Figura 2.0. Configuracin del Sistema.

En el ejemplo de la Figura 2.0., el usuario se logea como root,


luego verifica el tamao de la memoria compartida, finalmente
cambia el tamao con 1073741824.
Espacio de Disco Duro para Oracle 9i.-Para una instalacin
tpica de la base de datos y no se personaliza la instalacin,
se necesita acerca de 3.5 GB espacio en disco duro. Para
verificar el espacio en disco realizar el siguiente comando:
]#df
Con este comando obtendremos el espacio usado y libre de disco
duro.

Lic. Octavio Aguilar M. 5


Creando cuentas de usuario de Oracle.-Se deben crear grupos y
usuarios que participan en la instalacin, de la siguiente
forma:
]# su root
]# groupadd dba
]# groupadd oinstall
]# useradd -g oinstall -G dba oracle
]# passwd oracle
Creando Directorios.- Ahora se proceder a crear los directorios
donde se almacenara la base de datos y sus herramientas:
]# mkdir /opt/oracle
]# mkdir /opt/oracle/9.0
]# chown -R oracle:oinstall /opt/oracle
]# mkdir /opt/var/oracle/
]# chown oracle:dba /var/opt/oracle
]# chmod 775 /var/opt/oracle
Configurar Variables de Entornos.- Se deben configurar los
siguientes variables de entorno de Oracle:
]# export LD_ASSUME_KERNEL=2.4.1
]# export ORACLE_BASE=/opt/oracle
]# export ORACLE_HOME=/opt/oracle/9.0
]# export ORACLE_SID=test
]# export ORACLE_TERM=xterm
]# export NLS_LANG=AMERICAN;
]# export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
]# export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
]# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
]# export LD_LIBRARY_PATH
]# export PATH=$PATH:$ORACLE_HOME/bin
Se puede colocar estas variables de entorno al final de las
lneas del archivo ~oracle/.bash_profile si es que esta usando
el bash como shell, se hace todas esta operacin para que cuando

Lic. Octavio Aguilar M. 6


se autentifica como el usuario oracle no vuelva a definir
nuevamente estas variables de entorno.
Revisar si el xterm esta corriendo:
]# xterm
en caso que no este bien definido las xterm realizar el
siguiente proceso:
]# xhost +nombre_su_servidor
o
]# xhost +localhost
INICIANDO LA INSTALACIN DE ORACLE 9I.
Antes de comenzar con la instalacin debe estar seguro que los
directorios, usuarios, memoria compartida y las variables de
entorno de Oracle estn definidos, en resumen toda parte de
configuracin.
Si todo esta Listo, procedemos a ejecutar el instalador de
oracle como indica la Figura 2.1

Figura 2.1. Iniciando la Instalacin.

En la Figura 2.1. vemos que primero se inicia sesin como


usuario 'oracle', luego se dirige al lugar donde encuentran los
instadores (/home/oracle/Disk1, Disk2, Disk3), ingresando al
directorio Disk1, se realiza un listado y vemos al
'runInstaller' que el instalador de Oracle, procedemos a
ejecutarlo.

Lic. Octavio Aguilar M. 7


Una vez que se ejecuta 'runInstaller' de Oracle, se vera la
presentacin del Instalador como muestra la Figura 2.3.

Figura 2.3. Bienvenido a la Instalacin.


En la Figura 2.3. muestra la presentacin del instalador de
oracle 9i, una vez revisadas las operaciones que realizan
los botones presionamos 'Siguiente' para continuar con la
instalacin.

Lic. Octavio Aguilar M. 8


En la Figura 2.4, se debe especificar el Origen(Instaladores) y
el destino(En que directorio se instalara Oracle), luego
presionamos siguiente.

Figura 2.4. Ubicacin de archivos.


Resumen de la instalacin.- Se debe continuar y responder a
todas los requerimientos de la instalacin:
Welcome Screen:
Click Next
Inventory Location:
Click Next
Unix Group Name:
Usar "oinstall" and click Next cuando pregunte y se
pida correr /tmp/orainstRoot.sh, ejecutar antes de
continuar
File Locations:
Use valores por defecto

Lic. Octavio Aguilar M. 9


Available Products:
Seleccione "Oracle9i Database 9.2.0.1.0"
Installation Types:
Seleccione Custom personalizado
Available Products:
Click Next o adicionar mas componentes.
Components Locations:
Acepte valores por defecto y click Next
Privileged Operating System Groups:
Use los valores por defecto : OSDBA Group = dba, OSOPER
Group = dba
Oracle Managent Server Repository:
Use los valores seleccionados por defecto
Create database:
Seleccione SI para crear una Base de datos
Summary:
Resumen de la Instalacin

Lic. Octavio Aguilar M. 10


CAPITULO
SQL*PLUS AVANZADO 3
INTRODUCCIN.
La herramienta que Oracle tiene para la interaccin con la base
de datos Oracle se llama SQL*Plus. Bsicamente es un interprete
SQL con algunas opciones de edicin y formateo de resultados.
Antes de ver como se opera con SQL*Plus se debi de haber
realizado los siguientes operaciones de inicializacin que se
explican en el tema de Innatacin de Oracle 9i:
1.- Levantar la base de datos
2.- Iniciar el Listener (lsnrctl)
Estos pasos pueden automatizados mediante un script de
inicializacin en Linux.
Para Levantar una base de datos se
FALTA IMAGEN
Existen deferentes formas de Arrancar y Bajar una base de datos:
Arrancar la BD.
Para arrancar una base de datos use el comando STARTUP.
Dependiendo de los argumentos que se especifiquen realizando las
siguientes operaciones:
a) Arranca la instancia: asigna memoria a la SGA e inicia los
procesos en background.
SQL> STARTUP NOMOUNT
b) Arranca la instancia y la asocial con la base de datos; esto
es, asigna memoria para la SGA, inicia los procesos en
background y abre los archivos de control.
SQL> STARTUP MOUNT
SQL> STARTUP
c) Arranca la instancia, asocia los archivos con la base de
datos, abre la base de datos; esto es, asigna memoria a la SGA,
arranca los procesos en background abre los archivos de control,
abre los archivos de redo (redologs) y de datos(datafiles).
SQL> STARTUP OPEN

Lic. Octavio Aguilar M. 11


Bajar la BD.
Para bajar la Base de Datos use el comando SHUTDOWN. Al igual
que anterior, su operacin depende de los argumentos que se
invoquen.
a) No permite establecer una nueva conexin con la base de
datos, espera a que todas las conexiones contra la base de datos
de los usuarios se cierren y luego baja la base de datos.
SQL> SHUTDOWN NORMAL
SQL> SHUTDOWN
b) No permite establecer una nueva conexin con la Base de
Datos, espera que las conexiones establecidas actualmente sean
comprometidas o reversadas(comprometidas va Commit o reversadas
va Rollback) y luego cierra la conexin de los usuarios. Luego
de esto, baja la base de datos.
SQL> SHUTDOWN TRANSACTIONAL
c) No permite hacer una nueva conexin con la Base de datos,
cierra todas las conexiones de los usuarios que en ese momento
se encuentran, reversa sus transacciones no comprometidas, y
finalmente baja la base de datos.
SQL> SHUTDOWN INMEDIATE
d) No permite establecer una nueva conexin con la base de
datos, cierra todas las conexiones actuales con la base de
datos, no hace rollback de transacciones no comprometidas y
luego la baja la base de datos.
SQL> SHUTDOWN ABORT

Conectando a SQL*Plus.
El SQL*Plus es una aplicacin que se encuentra en el lugar donde
Oracle guardar sus aplicaciones: $ORACLE_HOME/bin
Por ejemplo podemos realizar las siguientes operaciones:

Lic. Octavio Aguilar M. 12


Figura 3.0. Archivos Binarios.
En la Figura 3.0. el usuario de linux se logea como usuario
oracle, luego con el comando <cd> se desplaza hasta el lugar
donde se encuentran los binarios de Oracle y luego con el
comando <pwd> visualizamos el directorio donde nos encontramos,
finalmente con <ls> listamos el contenido del directorio actual,
y vemos todas las aplicaciones, herramientas con las que cuenta
Oracle.
Desde Esta parte podemos iniciar SQL*Plus de la siguiente forma:

Figura 3.1. Ingresar al SQL*Plus


En la Figura 3.1 iniciamos SQL*Plus desde la consola,
seguidamente SQL*Plus se presenta y pregunta el nombre del

Lic. Octavio Aguilar M. 13


usuario y el password, si todo esta correcto se visualiza la
Figura 3.2.

Figura 3.2. Entorno del SQL*Plus

La Figura 3.2 se visualiza una vez que el usuario introdujo su


login y clave correcta, y le presenta al usuario un cursor
(SQL>) esperando que se introduzcan comandos SQL.

Lic. Octavio Aguilar M. 14


En caso de tener levantados otras bases de datos se pueden
especificar el usuario/clave y el nombre de la base de datos
como presenta la Figura 3.3.

Figura 3.3. Referencia a otra base de Datos.


Otra forma de ejecutar SQL*plus es ejecutando el comando <oemapp
worksheet> desde los binarios de Oracle, el mismo que presenta
la siguiente pantalla descrito en la Figura 3.4.

Figura 3.4 Conexin a SQL*Plus grfico


Esta pantalla es la que autentifica los usuarios de Oracle,
entre los botones de opcin seleccionamos el segundo, el nos
permite conectarnos a una base de datos, luego en la parte de

Lic. Octavio Aguilar M. 15


usuario introducimos un usuario de la base de datos, luego la
password o contrasea (tiger para este ejemplo), en servicio se
inserta el nombre del SID o la base de datos, en Conectar Como
seleccionamos de entre una lista de usuarios al usuario normal,
finalmente aceptamos los datos introducidos, si todo esta
correcto se visualiza la Figura 3.5.

Figura 3.5. SQL*Plus WorkSheet


En la Figura Figura 3.5 presenta al SQL*Plus donde se indica que
el usuario <scott> se conecto a la base de datos <contabilidad>,
en la parte izquierda se tiene algunos botones descritos de
arriba hacia abajo: Cambiar conexin a Base de Datos, Ejecutar,
Historial de Comandos, Comando Anterior, Comando Siguiente,
Ayuda, Repaso Rapido.
Se pueden realizar nuevas conexiones a otras bases de datos con
el botn <Cambiar conexin a Bases de Datos>.
Ahora usted esta listo para ejecutar comandos SQL, para ejecutar
comandos SQL se debe presionar la tecla <F5> o la opcin 2
<Ejecutar>, los resultados se vern en la parte inferior de la
pantalla.
Usar el comando DISCONNECT para desconectarse de la sesin
iniciada, y para conectarse otra vez usar CONNECT, como se
indica en la Figura 3.6.

Lic. Octavio Aguilar M. 16


Figura 3.6 Desconexin de la Base de Datos
Para salir de SQL*Plus, usar el comando EXIT, o el comando QUIT.
Ejecutando Comandos SQL.
Los comandos SQL pueden ser introducidos en mltiples lneas, no
es sensible a maysculas o minsculas. Los comandos se almacenan
en un Buffer y pueden ser ejecutados en cualquier momento.
Con el carcter punto y coma <;> se pueden ejecutar los comandos
de SQL, y con el comando RUN ejecutamos la ultima consulta
realizada.
Editando el buffer de SQL.
SQL*Plus guarda en un buffer la ultima sentencia SQL que se
introdujo. El buffer puede guardar una sola sentencia, en caso
de que se escriba una nueva, esta se sobrescribe sobre lo
anterior.

Lic. Octavio Aguilar M. 17


La sentencia anterior puede ser ejecutado con el comando RUN
visualizando la sentencia; y con </> se ejecuta la anterior
sentencia pero sin visualizar la sentencia, como en la Figura
3.7.

Figura 3.7. Comando RUN


Comando LIST.- Lista las lneas del Buffer. Abreviado 'L'
Sintaxis: LIST

Lic. Octavio Aguilar M. 18


Comando APPEND.- adiciona un texto al final de la lnea.
Sintaxis: APPEND texto

Figura 3.8. Comando APPEND


Comando CHANGE.- Este comando cambia el contenido 'fuente' por
el 'destino'. Este comando se abrevia con 'C';
Sintaxis: CHANGE /anterior/nuevo

Figura 3.9. Comando CHANGE

Lic. Octavio Aguilar M. 19


En la Figura 3.9. Se asume que se hizo una consulta (select *
from tab tname like 'A%';), este ejemplo cambia el 'like' por un
'=', luego con run se ejecuta la consulta.
Comando INPUT.- Inserta uno o mas lneas.
Sintaxis: INPUT

Figura 3.10. Comando INPUT


En el ejemplo de la Figura 3.10. Se asume que ya existe una
consulta, y se adiciona (con INPUT) dos linea y con LIST se
lista la consulta existente en el buffer.(este puede ser
ejecutado con RUN O /).
Comando CLEAR BUFFER
Este .- comando permite limpiar el
buffer. Abreviado por CL BUFF.
Sintaxis: CLEAR BUFFER

Lic. Octavio Aguilar M. 20


Comando DEL.- Este comando permite borrar una lnea.
Sintaxis: DEL

Figura 3.11. Comando DEL


El ejemplo de la Figura 3.11. Primero lista la consulta del
buffer, luego lista la fila 3, y con DEL elimina la fila
listada, y para verificar si se efectivizo la eliminacin
ejecutamos 'L'.
Usando archivos Script.
SQL*Plus provee comandos para guardar consultas SQL que se
encuentran en el buffer, o ejecutar scripts con consultas.
#Para guardar un SQL en un archivo usar el comando SAVE
nombre_archivo.
SQL> SAVE /home/oracle/misc.sql
Este ejemplo guarda una consulta SQL(que se encuentra en el
buffer) con el nombre 'misc.sql' en esta direccin /home/oracle/
#Se puede ver el contenido de un script con el comando GET
nombre_archivo.
SQL> GET /home/oracle/misc.sql
#Se pueden ejecutar script con el comando START nombre_archivo o
con @nombre_archivo.
SQL>START /home/oracle/misc
SQL>@/home/oracle/misc

Lic. Octavio Aguilar M. 21


En estos ejemplos no se hace referencia a la extensin
'.sql'.
Ejemplos:
1.-Ejecuta una consulta SQL.
SQL>select *
from tab
where tame like 'A%';
2.-Lista el contenido del Buffer.
SQL>L
3.-Guarda la consulta anterior en /home/oracle/ con el nombre
'consulta.sql'.
SQL>save /home/oracle/consulta.sql
3.-Visualiza el contenido de un script que se encuentra en
/home/oracle/ llamado consulta.sql.
SQL>get /home/oracle/consulta.sql
5.-Ejecuta un script que se encuentra en /home/oracle/ llamado
consulta.sql
SQL>start /home/oracle/consulta
o de otra forma.
SQL>@/home/oracle/consulta

Lic. Octavio Aguilar M. 22


Comando DESCRIBE.- Permite visualizar la estructura de una
tabla.
Sintaxis: DESCRIBE nombre_tabla
DESC nombre_tabla

Figura 3.11. Comando DESCRIBE


En el ejemplo de la Figura PANTA15 primero se lista la tabla
alumno, luego se visualiza la estructura de la tabla alumno.

Lic. Octavio Aguilar M. 23


Adicionando comentarios a Scripts archivos.
En un script se pueden comentar lneas o bloque de lneas con /*
comentario */ o con el comando REMARKS abreviado REM.

Figura 3.12. Comentarios /* */

Figura 3.13. Comentarios REM

Lic. Octavio Aguilar M. 24


CAPITULO
INTRODUCCIN AL SQL 4
HISTORIA DEL LENGUAJE SQL.
El nacimiento del lenguaje SQL data de 1970 cuando E.F. Codd
publica su libro: Un modelo de datos relacional para grandes
bancos compartidos. Este libro dictara las directrices de las
bases de datos relacionales. Apenas dos aos despus IBM(para
quien trabajaba Codd) utiliza las directrices de Codd para crear
el Standard English Query Language(Lenguaje Estndar Ingles para
consultas) al que se llamo SEQUEL. Mas adelante se le asignaron
las siglas SQL.
Poco despus se converta en un estndar en el mundo de las
bases de datos avalando por organismos ISO y ANSI. An hoy
sigue siendo uno de los estndares ms importantes de la
industria informtica.
Actualmente el ltimo estndar es el SQL del ao 1999 que ampli
el anterior estndar conocido como SQL92. El SQL de oracle es
compatible con el SQL92.
ESTRUCTURA.
La estructura bsica de almacenamiento en Oracle 9i es una
tabla. Una tabla consiste en columnas y caractersticas, los
datos son almacenados en las tablas como filas.
Las sentencias de SQL es un lenguaje usado para crear, acceder y
manipular datos y estructura de una base de datos. SQL puede ser
categorizado de la siguiente forma:
Lenguaje de Manipulacin de datos (DML).- Usado para
acceder, create, modificar, o eliminar datos en estructuras
existentes en la base de datos. Las sentencias del DML
incluye consultas de datos (SELECT), adicin de nuevas
filas(INSERT), modificacin de filas existentes(DELETE),
etc.
Lenguaje de Definicin de Datos (DDL).- Usado para definir,
modificar (ALTER), o eliminar(DROP) objetos de una base de
datos y sus privilegios. Las sentencias DDL incluyen
operaciones que permiten crear, modificar, eliminar o
renombrar objetos(CREATE, ALTER, DROP, RENAME), gestin de

Lic. Octavio Aguilar M. 25


privilegios(GRANT, REVOKE), auditoria a la base de
datos(AUDIT, NOAUDIT) and adicin de descripcin acerca de
un objeto en el diccionario(COMMENT).
Control de Transacciones.- Usado para grupos, un conjunto
de sentencias del DML es como una simple transaccin.
Usando esas sentencias se pueden guardar los cambios
realizados(COMMIT) o descartar esos cambios(ROLLBACK)
hechos las sentencias del DML. En el Control de
Transacciones se incluye los puntos o marcas en las
transacciones para posibles rollback(SAVEPOINT). Se pueden
definir las propiedades de las transacciones(SET
TRANSACTION).
Control de sesiones.- Usado para el control de propiedades
de sesiones del usuario(Una sesin es como un hilo que se
controla desde la conexin hasta la desconexin). Las
sentencias del control de sesiones incluye propiedades del
control de sesiones(ALTER SESSION) and habilitar y
deshabilitar roles(SET ROLE).
Control de Sistema.- Usado para el manejo de propiedades de
la base de datos(ALTER SYSTEM)
TIPOS DE DATOS DE ORACLE
Cuando se crean tablas para almacenar en una base de datos, se
necesita especificar un tipo de dato para cada atributo o
columna que se define en una tabla. Oracle 9i soporta ANSI y
tipos de datos DB2. Se clasifican los tipos de datos de la
siguiente forma:
carcter.- CHAR, NCHAR, VARCHAR2, NVARCHAR2
Numrico.- NUMBER
Long y raw.- LONG, LONG RAW, RAW
Fecha y hora.- DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE,
TIMESTAMP WITH LOCAL TIME ZONE, INTERVAL YEAR TO MONTH,
INTERVAL DAY TO SECOND
Objetos Largos.- CLOB, NCLOB, BCLOB, BFILE
identificador de Filas.- ROWID, UROWID
CHAR(<tamao>)

Lic. Octavio Aguilar M. 26


El tipo de dato CHAR es de longitud fija y almacena datos
alfanumricos, El tamao que pude tomar un CHAR es desde 1 byte
hasta 2000 bytes, por defecto es 1.
VARCHAR2(<tamao>)
El VARCHAR2 es un tipo de dato de longitud variable y almacena
datos alfanumricos, El tamao que puede tomar un VARCHAR2 es de
4000 bytes .
NUMBER(<p>,<s>)
El tipo de dato NUMBER almacena nmeros con precisin de <p>
dgitos y una escala de <s> decimales. La precisin y la escala
son opcionales. El tipo de dato NUMBER es usado para almacenar
enteros negativos y positivos, nmeros con punto fijo y nmeros
con punto flotante. La precisin puede estar entre 1 y 38 y la
escala esta entre -83 y 127. Si la precisin y la escala son
omitidos, Oracle asume el mximo de ambos valores. Por ejemplo
si define una columna como NUMBER(5,2), el rango de valores que
podr almacenar es de -999.99 hasta 999.99.
DATE
El tipo de dato DATE se usa para almacenar fecha e informacin
de la hora. DATE se puede convertir a otros formas, los
mismos que pueden tener nmeros de funciones especiales y
propiedades para la manipulacin de fechas, clculos simples. El
tipo de datos DATE ocupa un espacio de almacenamiento de 5
bytes, este tipo de dato contiene:
Ao
Mes
Dia
Hora
Minuto
Segundos
Para insertar o actualizar fechas se utiliza la funcin TO_DATE.
Oracle por defecto tiene este formato DD-MON-YY. La funcin
SYSDATE retorna la fecha y hora actual del sistema.
NLS_DATE_FORMAT inicializa como parmetro el formato de las
fechas.
OPERADORES ARITMETICOS

Lic. Octavio Aguilar M. 27


Un operador aritmtico opera sobre valores numricos:
+ - .-Operador unario: usado para la representacion
positiva o negativa de un numero.
+ .-Suma: usado para sumar dos valores o expresiones
- .-Resta: usado para encontrar la diferencia entre dos
valores o expresiones.
* .-Multiplicacin: Usado para multiplicar dos valores o
expresiones.
/ .-Divisin: Usado para dividir un dato o expresion con
otro numero.
OPERADOR DE CONCATENACION
El operador de concatenacin es usado para concatenar o unir dos
cadenas de caracteres(texto). El resultado de una concatenacin
es otra cadena de caracteres. Dos barras verticales (||) son
usados como operador de concatenacin.

Lic. Octavio Aguilar M. 28


Ejemplo:
'Hola me llamo'||'Juan' el resultado es 'hola me llamo
Juan'
'Hola me llamo '||'Juan' el resultado es 'hola me llamo
Juan'
MANEJANDO TABLAS Y CONTRAINTS
Revisar Objetos de la Base de Datos.
Los datos en la Base de datos Oracle son almacenados en Tablas.
Una tabla es el objeto principal de la base de datos.
Tablas.-Definidos con columnas y almacena filas de datos
llamados registros. Una tabla como mnimo tiene una columna. En
oracle se pueden crear objetos tablas y tablas temporales.
Una tabla puede almacenar una extensa variedad de datos. Puede
almacenar texto, informacin numrica, fechas(date), fechas y
horas(timestamp), etc.
CREANDO TABLAS.-
La estructura de una tabla es parecido una hoja electrnica de
Excel con columnas y filas. Una tabla esta definido a lo mximo
con 30 caracteres como nombre. Por defecto ser almacenado en el
tablespace por defecto del usuario que crea la tabla.
Con DESCRIBE se puede ver la Estructura de una tabla.
SQL> create table alumno(
ru varchar(10) not null,
nombre varchar(30),
ap varchar(30),
f_nac date,
primary key(ru)
);
#Con DESCRIBE se puede visualizar la estructura de una tabla.
SQL>describe alumno
SQL>desc alumno //o de esta forma
#Listar Tablas
SQL> select * from tab;
Valores por defecto para las columnas

Lic. Octavio Aguilar M. 29


Cuando se crean tablas o se modifica, se pueden especificar los
valores por defecto para las columnas. Cuando en una insercin a
alguna tabla, no se especifica un dato para alguna columna,
entonces se inserta el valor por defecto definido en la tabla.
#En el ejemplo se crea la tabla alumno, donde el atributo
apellido materno(am) si es que no se inserta datos se guardara
un guin('-'), y el atributo estado de igual forma si no se
insertan datos por defecto se guardara el numero 1.
SQL>create table alumno(
ru varchar(10) not null primary key,
nombre varchar(30),
ap varchar(30),
am varchar(30) default '-',
estado integer default 1
);
#Ahora insertamos datos en la tabla alumno, pero no insertamos
los datos am y "estado"
SQL>insert into alumno(ru,nombre,ap) values(111,'Juan','Paez');
#Listamos la tabla "alumno", y veremos que por defecto se
inserto un guion - en la columna am y "1" en la columna
"estado"
SQL>select * from alumno;

Creando una Tabla desde otra tabla.-


Se puede crear una tabla usando una consulta basados en una o ms
tablas. El tipo de dato de cada columna esta determinado por el
resultado de la columna(se puede usar *).
#El ejemplo supone que se necesita duplicar la estructura y
datos de la tabla alumno y se crea una tabla llamada
"estudiantes".
SQL> create table estudiante
as select * from alumno;
SQL> desc estudiante;

Lic. Octavio Aguilar M. 30


MODIFICANDO TABLAS.
Despus de crear una tabla, se puede modificar la estructura de
una tabla, adicionando y eliminando columnas, pero no se puede
renombrar una columna.
Tambin se puede modificar una tabla si es que se necesita
adicionar o cambiar definiciones de restriccin

Adicionando Columnas.
sintaxis:
ALTER TABLE [<esquema>.]<nombre_tabla> ADD
<definicion_columns>;
#En este ejemplo se Adiciona la columna "fecha_nac" a la tabla
"alumno"
SQL>alter table alumno add fecha_nac date;
SQL>desc alumno
#Tambin se pueden adicionar mas de una columna en una sola
consulta, para tal efecto se deber encerrar entre parntesis los
atributos que se adiciona.
SQL>alter table alumno add
(telf integer default 0 not null,
fe_nac date default sysdate,
dir varchar(30));
SQL>desc alumno

Modificando Columnas.
La sintaxis para modificar columna existentes :
ALTER TABLE [<esquema>.]<nombre_tabla>
MODIFY <nombre_columna> <nuevo_atributo>
Se pueden tambin modificar muchos atributos, haciendo uso de los
parntesis.
#Para este ejemplo Modificamos el atributo "ap" a varchar(50)
SQL>alter table alumno modify ap varchar(50);

Lic. Octavio Aguilar M. 31


#Este ejemplo modifica un grupo de atributos.
SQL>alter table xalumno modify
(nombre varchar(50),
ap varchar(50) );

Eliminando columnas.
Se pueden eliminar columnas si no son usados.
Sintaxis :
ALTER TABLE [<esquema>.]<nombre_tabla>
DROP {COLUMN <nombre_columna> | (<nombres de columnas>)}
[CASCADE CONSTRAINTS]
DROP COLUMN elimina las columnas especificadas para la tabla. Se
pueden eliminar mas de una columna al mismo tiempo, separados
con comas entre parntesis. Si la columna tiene restricciones y
dependencias, con CASCADE CONSTRAINTS puede eliminar
restricciones.
#Para este ejemplo eliminamos la columna "fe_nac"
SQL>alter table alumno column fe_nac;
#Eliminar un conjunto de columnas
SQL>alter table alumno drop (fe_nac, telf);
ELIMINANDO TABLAS.
Sintaxis:
DROP TABLE [esquema.]table_name [CASCADE CONSTRAINTS]
Cuando se elimina una tabla, los datos y la definicin de la
tabla son eliminados. Los ndices, restricciones, triggers y
privilegios de la tabla tambin son eliminados al momento de
eliminar una tabla.
#Este ejemplo elimina la tabla "alumno".
SQL>drop table alumno;
#Si es que existen tablas que hacen referencia a la tabla
"Alumno", y si queremos eliminar la tabla alumno, la consulta
seria :
SQL>drop table alumno cascade contraints;

Lic. Octavio Aguilar M. 32


RENOMBRANDO TABLAS.
La sentencia RENAME es utilizada para renombrar una tabla y
otros objetos de la base de datos. La sintaxis es:
RENAME nombre_anterior TO nombre_nuevo;
#Para este ejemplo, existe la tabla "alumno" y se quiere
modificar el nombre por "estudiantes".
SQL>rename alumno to estudiante;

MANEJANDO RESTRICCIONES(CONSTRAINTS).
Las restricciones se crean en las bases de datos para hacer
cumplir las reglas de negocios. Oracle soporta las siguientes
restricciones :NOT NULL, CHECK, UNIQUE, PRIMARY KEY, FOREIGN
KEY.
Una restriccin se puede aplicar con las sentencias CREATE TABLE
o con ALTER TABLE.

Restriccin NOT NULL.


La restriccin NOT NULL se define sobre un nivel o columna, y no
puede ser definido sobre una tabla. La sintaxis es:
[CONSTRAINT <nombre rescticcion>] [NOT] NULL

Lic. Octavio Aguilar M. 33


#En el ejemplo se crea una tabla con dos columnas que tienen la
restriccin NOT NULL.
create table alumno(
ci integer CONSTRAINT cedulas NOT NULL,
nombre varchar(40) NOT NULL,
ap varchar(40) NOT NULL,
primary key(ci)
);
En este ejemplo se asigna un nombre a la restriccin en el caso
de "ci", lo que no ocurre con el atributo "nombre", es el
sistema que genera un nombre de restriccin.

Restriccin CHECK.
La restriccin CHECK se define sobre una columna. La sintaxis
es:
[CONSTRAINT <nombre_restriccion>] CHECK ( <condicion> )
#En este ejemplo se crea una tabla "sueldo", con la restriccin
que el atributo "salario" sea mayor a 100 y menor a 100000.
SQL>create table salario(
ci integer not null,
fecha date not null,
salario float not null,
primary key(ci,fecha),
constraint mi_sal check(salario > 100 and salario < 100000)
);
La sentencia CHECK pueden ser adicionada o eliminado por ALTER
TABLE.
#Este ejemplo adiciona la restriccin "mi_ci" donde se verifica
que "ci" sea mayor a 100.
SQL>alter table sueldo add constraint mi_ci check(ci > 100);
#tambin se puede eliminar restricciones
SQL> alter table alex drop constraint mi_sal;

Lic. Octavio Aguilar M. 34


Restriccin UNIQUE
La restriccin UNIQUE asegura que los atributos definidos con
UNIQUE no se dupliquen. La sintaxis es :
[CONSTRAINT <nombre restriccin>] UNIQUE
#En este ejemplo se crea la tabla "Datos" donde el atributo "ci"
es nico en toda la columna.
SQL>create table bdatos(
ru integer not null primary key,
ci varchar(10) UNIQUE
);
#La otra forma seria:
SQL>create table datos(
ru integer not null primary key,
ci varchar(10) CONSTRAINT cedulas UNIQUE
);
#En caso de tener ya creado la tabla "datos" se adiciona de esta
forma:
SQL>alter table datos add cedula integer UNIQUE;

Restriccin PRIMARY KEY.


Toda tabla puede tener solo una clave principal o primaria, las
claves por definicin no se repiten, ni aceptan datos nulos.
Sintaxis a nivel columna :
[CONSTRAINT <nombre restriccion>] PRIMARY KEY
Sintaxis a nivel Tabla :
[CONSTRAINT <nombre restriccin>]
PRIMARY KEY(<columna_1>,<columna_2>,...,<columna_N>)

#Ejemplo a nivel columna


SQL>create table balumno(
ci integer not null primary key,
nombre varchar(30),
ap varchar(30)

Lic. Octavio Aguilar M. 35


);
#Ejemplo a nivel tabla
SQL>create table balumno(
ci integer not null,
nombre varchar(30) not null,
ap varchar(30),
PRIMARY KEY(ci, nombre)
);
#Lo mismo del anterior definiendo el nombre de la restriccin
SQL>create table balumno(
ci integer not null,
nombre varchar(30) not null,
ap varchar(30),
CONSTRAINT alumnos_cons PRIMARY KEY(ci,nombre)
);

Restriccin FOREIGN KEY.


La restriccin FOREIGN KEY, permite definir a los atributos
forneos, aquellos atributos que fueron herede dados de otra
tabla, gracias a esta definicin podremos controlar que los
datos existentes en la columna fornea verifique que tambin
exista en la tabla a la que se hace referencia.
La referencia es al PRIMARY KEY o a la restriccin UNIQUE de la
tabla padre.
definicin a nivel columna:
[CONSTRAINT <nombre restriccin>]
REFERENCES [<esquema>.]<tabla> [(<columna_1>,<columna_2>,...)]
[ON DELETE {CASCADE | SET NULL}]
definicin a nivel tabla:
[CONSTRAINT <nombre restriccin>]
FOREIGN KEY (<columna_1>,<columna_2>,..)
REFERENCES [<esquema>.]<tabla> [(<columna_1>,<columna_2>,...)]
[ON DELETE {CASCADE | SET NULL}]

Lic. Octavio Aguilar M. 36


Con la clusula ON DELETE indica la accin que realiza cuando
una fila en la tabla padre es eliminada. Se pueden eliminar las
filas de las tablas hijos especificando CASCADE o asignando
valores nulos(NULL) con SET NULL.
#Para iniciar con los ejemplos crearemos una tabla padre.
SQL>create table alumno(
ci integer not null PRIMARY KEY,
ru integer UNIQUE,
nombre varchar(30)
);
#Ahora crearemos la tabla telfono que hace referencia a la tabla
alumno, a nivel columna.
SQL>create table telefono (
ci integer not null CONSTRAINT cedulas references
alumno(ci),
nombre varchar(30)
);

#ejemplo es similar al anterior, a nivel tabla.


SQL>create table telefono(
ci integer not null primary key,
numero integer,
foreign key(ci) references alumno(ci)
);
#Es otra forma de definicin.
SQL>create table telefono(
ci integer not null primary key,
ru integer,
constraint nombre_cons foreign key(ru) references alumno(ru)
);
#Este ejemplo asume que la tabla "telefono" ya existe y adiciona
la restriccin FOREIGN KEY al atributo "ci"
SQL>alter table telefono

Lic. Octavio Aguilar M. 37


add constraint cedulas foreign key(ci) references alumno(ci);
SQL>alter table telefono
add foreign key(ci) references alumno(ci);

#Este ejemplo asume que la tabla "telefono" ya existe y adiciona


la restriccin FOREIGN KEY, esta vez la referencia es a un
atributo con definicin UNIQUE.
SQL>alter table telefono add
foreign key(ru) references alumno(ru);

#Este ejemplo elimina en cascada los datos de la tabla


"telefono" cuando una fila es eliminada en la tabla "alumno"
SQL>alter table telefono add
foreign key(ru) references alumno(ru) ON DELETE CASCADE;
#Este ejemplo anula las filas de la tabla "telfono" cuando una
fila es eliminada en la tabla "alumno"
SQL>alter table telefono add
foreign key(ru) references alumno(ru) ON DELETE SET NULL;

MODIFICANDO DATOS
El Lenguaje de Manipulacin de datos(DML) es un subconjunto de
SQL empleado para manipular datos. Las declaraciones del DML
soportados por Oracle son :
INSERT Adiciona datos a una tabla.
UPDATE Cambia los valores almacenados en una tabla
DELETE Elimina filas de una tabla.
Insertando filas en la tabla.
La sentencia INSERT es usada para adicionar filas a una o ms
tablas.
#En estos ejemplos insertan datos en la tabla alumno.
SQL>insert into alumno(ci,nombre,ap)
values(111,'Raul','Peralta');

Lic. Octavio Aguilar M. 38


SQL>insert into alumno(ci,nombre,ap)
select * from bbbbalumno;
SQL>insert into alumno
select * from estudiante;

SQL>insert into alumno(ci,nombre,ap,am)


values(111,'Raul','Peralta',NULL);

SQL>insert into aaaalumno(ci,nombre,ap,am)


values(111,'Raul','Peralta','');
Insertando en Mltiples tablas.
La sentencia INSERT puede ser usada para adicionar filas a mas de una
tabla.
#Ejemplo si tenemos una tabla personas(ci,nombre,ap,genero) y
deseamos dividir los datos en la tabla hombres(ci, nombre, ap) y
mujeres(ci, nombre, ap).
SQL>insert all
when genero='F' then
into hombres(ci,nombre,ap)
values(ci,nombre,ap)
when genero='M' then
into mujeres(ci,nombre,ap)
values(ci,nombre,ap)
select genero,ci,nombre,ap
from personas;

Actualizando filas en una tabla.


La sentencia UPDATE es usada para modificar filas existentes en una
tabla.

Lic. Octavio Aguilar M. 39


#Este ejemplo modifica la cantidad de materia y promedio de notas del
estudiante con CI=111.
SQL>update alumno
set (cantmateria,promedio)=(select count(*), avg((p1+p2+p3)/3)
from nota
where (gestion=2005)and(ru=111)
)
where ru=111;
y de otra forma
SQL>update alumno
set (nombre='Jose Luis', ap='Paez'
where ci=111;
Eliminando Filas de una Tabla.
La sentencia DELETE es usada para eliminar filas de una tabla.
#este ejemplo elimina a los estudiantes que no tienen telfonos.
SQL>delete from alumno
where ci not in (select ci from telefono );

SQL>delete from alumno


where ru=111;

Escribiendo Consultas Simples.


Para realizar ejemplos de las sentencias que se consideran en
este punto, utilizaremos las siguientes tablas :
alumno(ru, nombre, ap, am, estado)
materia(sigla, nombre, nivel)
nota(sigla, ru, gestion, pa1, pa2, pa3)
telefono(ru, numtelf)

Usando la sentencia SELECT


La sentencia SELECT es una de las sentencias ms usadas del SQL.
Esta sentencia permite recuperar informacin almacenada en la
base de datos. Despus de la sentencia SELECT, se especifican
los atributos que deseamos visualizar, se lo puede hacer

Lic. Octavio Aguilar M. 40


haciendo referencia a atributos o simplemente colocando un
asterisco "*" para indicar que se visualizaran todos los
atributos. Despus del SELECT ... esta el FROM, en esta parte
hacemos referencia a las tablas fuentes, de donde se extrae
informacin para luego visualizarlo en el SELECT.
Ejercicio:
#Listar a todos los estudiantes
SQL>select ru, nombre, ap, am, estado
from alumno;
de otra forma:
SQL>select *
from alumno;

Alias para las columnas.


El alias de una columna es definido despus del nombre de la
columna usando la palabra AS o simplemente un espacio en blanco.
Ejercicio:
#En este ejemplo se lista el RU y la SIGLA de la tabla nota, con
encabezados que describan a la columna.
SQL>select ru as registro_univ, sigla as sigla_materia
from nota;
de otra forma:
SQL>select registro_univ, sigla sigla_materia
from nota;

Asegurando filas nicas.


Con la palabra reservada DISTINCT despus del SELECT podremos
eliminar las filas repetidas que resulta del SELECT. Entre
DISTINCT y UNIQUE el resultado es el mismo.
Ejercicio:
#Listar los registros universitarios de la tabla "nota".
SQL>select ru
from nota;

Lic. Octavio Aguilar M. 41


El resultado de esta consulta son registros universitarios(ru)
repetidos por que un "ru" puede estar relacionado con varias
materias(sigla)

#Eliminando filas repetidas en la anterior consulta.


SQL>select DISTINCT ru
from nota;

De otra forma:
SQL>select UNIQUE ru
from nota;

Limitando Filas.
La declaracin WHERE esta despus del SELECT ... FROM. La
declaracin WHERE es utilizada para condicionar las filas
listadas en el SELECT. Se pueden utilizar nombres de columnas o
expresiones en la clusula WHERE.
Ejercicios:
#Listar las materias que curso el estudiante con ru=111;
SQL>select ru, sigla, gestion
from nota
where (ru=111);

#Listar las materias(sigla) y notas finales del estudiante Juan


Paez con ru=111 en la gestin 2005
SQL>select ru, sigla,((pa1+pa2+pa3)/3)
from nota
where (ru=111)and(gestion=2005);

IS NULL y IS NOT NULL.


El operador IS NULL verifica si el atributo tiene asignado nulo,
y IS NOT NULL en caso contrario. Los operadores = o != no
comparan valores nulos.

Lic. Octavio Aguilar M. 42


Ejercicios:
#Listar los apellidos maternos(am) con datos NULL
SQL>select ru, nombre, ap
from alumno
where (am is null);

#Listar a los estudiantes que no tengan nulos en su primer


parcial(pa1), gestin 2005 y materia INF-121.
SQL>select ru, sigla
from nota
where (pa1 not is null)and(sigla='INF-121');

LIKE.
Este operador compara caracteres. Para las comparaciones se
Utilizan los smbolos :
% = cero o ms caracteres.
_ = Un carcter.
Ejercicios:
#Listar a todos los estudiantes que su apellido paterno(ap)
comience con la vocal 'A'.
SQL>select ru, nombre, ap, am
from alumno
where (ap LIKE 'A%');
#Para este ejercicio se utiliza el carcter '%' para indicar que
puede continuar cualquier carcter.

#Listar a todos los estudiantes que su apellido paterno solo


tenga 4 caracteres.
SQL>select ru, nombre, ap, am
from alumno
where (ap LIKE '____')
#Esta consulta se utiliza 4 veces '_', para indicar que el
apellido puede tener a lo sumo 4 caracteres.

Lic. Octavio Aguilar M. 43


#Lista a todos los estudiantes que su nombre tenga mnimamente 3
vocales 'a'.
SQL>select *
from alumno
where (nombre LIKE '%a%a%a%');
Esta consulta inserta en la condicin 3 caracteres 'a', luego se
utiliza el '%' para indicar que el nombre puede iniciar con
cualquier carcter y lo mismo para finalizar.

BETWEEN
El operador BETWEEN es usado para comparar un rango de valores.
X BETWEEN A AND B, esta condicin devuelve TRUE o verdad si el
valor X esta entre A y B, y FALSE o falso en caso contrario.
Ejercicios:
#Seleccionar a todos los estudiantes(ru) que en su parcial
1(pa1) tenga desde 40 hasta 50, en la materia INF-111, gestin
2005.
SQL>select ru
from nota
where (gestion=2005)and(pa1 BETWEEN 40 AND 50);

#Seleccionar a todos los estudiantes que en su nota final haya


obtenido entre 90 a 100, en la materia INF-111, gestin 2005.
SQL>select ru,((pa1+pa2+pa3)/3)
from alumno
where (sigla='INF-111')and(gestion=2005)and
(((pa1+pa2+pa3)/3) BETWEEN 90 AND 100);
En este ejemplo como no se tiene la nota final, lo que se hace
es calcular la nota final, en base a los parciales.

IN y NOT IN
Los operadores IN y NOT IN son usados para comparar un valor con
cada valor de la lista o subconsulta. Con el operador IN se

Lic. Octavio Aguilar M. 44


verifica si un valor esta incluido en la lista o subconsulta, y
con NOT IN se niega lo anterior.
Ejercicios:
#Listar a los estudiantes que no tienen telefonos.
SQL>select nombre, ap, am
from alumno
where ru NOT IN ( select ru
from telefono
)
En la consulta se compara el ru generado por la tabla alumno con
los ru's de estudiantes con telfonos.
#Listar las materias que fueron programadas en la gestin 2005.
SQL>select sigla, nombre
from materia
where sigla IN (select sigla
from nota
where gestion=2005
);

ANY o SOME.
El operador ANY o SOME son usados para comparar un valor con
cada valor de una lista o subconsulta. El operador ANY o SOME
compara un valor, si cumple la condicin con algn valor de la
lista o subconsulta. El operador ANY o SOME siempre esta
precedido con los operadores de comparacin: =,!=,<,>,<=, >=

Lic. Octavio Aguilar M. 45


Ejercicios:
#Listar a todos los estudiantes que por lo menos reprobaron
alguna materia en la gestin 2005.
SQL>select X.ru
from nota X
where 51 >ANY (select ((Y.pa1+Y.pa2+Y.pa3)/3)
from nota Y
where (Y.gestion=2005)and(Y.ru=X.ru)
) ;

#Seleccionar a todos los estudiantes que por lo menos tenga un


telfono.
SQL>select nombre, ap
from alumno
where ru =ANY (select ru
from telefono
);

ALL.
El operador ALL es usado para comparar un valor con todos los
valores de una lista o subconsulta. El Operador ALL, compara el
valor comparado cumple la condicin con todos los valores de la
lista o subconsulta. El operador ALL siempre esta precedido con
los operadores de comparacin: =,!=,<,>,<=, >=.
Ejercicios:
#Seleccionar a todos los estudiantes que reprobaron todas las
materias programadas en la gestin 2005.
SQL>select X.ru
from nota X
where 51 >=ALL (select ((Y.pa1+Y.pa2+Y.pa3)/3)
from nota Y
where (Y.gestion=2005)and(Y.ru=X.ru)
) ;

Lic. Octavio Aguilar M. 46


#Seleccionar a todos estudiantes que con una nota final en
cualquier materia, haya superado a todas las notas finales del
estudiantes Juan Paez con ru=111 en la gestin 2005.
SQL>select X.ru
from nota X
where (X.ru<>111)and(X.gestion=2005)and
( ((X.pa1+X.pa2+X.pa3)/3)
>=ALL (select ((Y.pa1+Y.pa2+Y.pa3)/3)
from nota Y
where (Y.gestion=2005)and(Y.ru=111)
)
);

EXISTS.
El operador EXISTS esta siempre antes de una subconsulta entre
parntesis. EXISTS devuelve TRUE o verdad si la subconsulta
devuelve como mnimo una fila.
Ejercicios:
#Seleccionar a todos los estudiantes que no tengan Telfono.
SQL>Select A.nombre, A.ap, A.am
from alumno A
where EXISTS (select T.ap, T.nombre
from telefono T
where (T.ru=A.ru)
);

Lic. Octavio Aguilar M. 47


#Seleccionar a los estudiantes que no programaron materias en la
gestin 2004;
SQL>Select A.nombre, A.ap, A.am
from alumno A
where NOT EXISTS (select *
from nota N
where (N.ru=A.ru)
);
ORDER BY.
Esta clusula se coloca despus de:
SELECT.. FROM ... WHERE ... ORDER BY
En la clusula ORDER BY se especifican los atributos por los que
se desea ordenar el resultado de la consulta, si es que no se
especifica ASC o DESC al final, por defecto lo ordena en forma
ascendente (ASC), en caso de especificar DESC al final lo ordena
en forma descendente.
Ejercicios:
#listar a todos los estudiantes en forma ascendente ordenados
por apellido paterno(ap);
SQL>select ru, ap, am, nombre
from alumno
ORDER BY ap ASC;
Si es que no se especifica ASC, se asume por defecto la
ordenacin en forma ascendente.
#seleccionar a todos los estudiantes en forma descendente
ordenados por apellido paterno(ap), que cursan materia de
Sistemas Operativos INF-111 en la gestin 2005.
SQL>select nombre, ap, am
from alumno A
where A.ru IN (select ru
from nota
where (gestion=2005)and(sigla='INF-111')
)
ORDER BY A.ap DESC;

Lic. Octavio Aguilar M. 48


FUNCIONES AGREGADAS.
Estas funciones se ubican despus de la sentencia SELECT. Entre
las funciones agregadas mas importantes tenemos:
SUM = Suma los valores de una columna.
COUNT = Cuenta la cantidad de filas.
AVG = Calcula el promedio de una columna.
MAX = Extrae el valor mximo de la columna.
MIN = Extrae el valor mnimo de la columna.
Ejercicios:
#Seleccionar los primeros parciales(pa1): suma de los pa1, la
cantidad de pa1, el promedio de los pa1, el pa1 mximo y el pa1
mnimo.
SQL>select SUM(pa1),COUNT(*),AVG(pa1),MAX(pa1),MIN(pa1)
from nota;

#Seleccionar la nota mas alta y la mas baja obtenido en la


gestin 2005.
SQL>select MAX((pa1+pa2+pa3)/3),MIN((pa1+pa2+pa3)/3)
from nota
where (gestion=2005);

#Con esta consulta se calcula tambin el promedio de los


primeros parciales, similar a AVG.
SQL>select (SUM(pa1)/COUNT(*))
from nota;
Agrupando datos con GROUP BY.
Esta clusula permite trabajar con resultados agrupados por uno
mas atributos previamente especificados, sobre estos grupos se
pueden aplicar las funciones agregadas.
Ejercicios:

Lic. Octavio Aguilar M. 49


#Seleccionar la cantidad de materias que lleva cada
estudiante(RU).
SQL>select ru, count(*)
from nota
group by ru;
Esta consulta los que hace es agrupas los datos de la tabla
NOTA, y los agrupa por RU, y luego cuenta en cada grupo cuantas
filas existen.

#Seleccionar por materia(sigla) la cantidad de estudiantes


programados en la gestin 2005.
SQL>select sigla, count(sigla)
from nota
where (gestion=2005)
group by sigla;

Limitando grupos de datos con HAVING.


Las funciones de grupos no pueden ser usadas en la clusula
WHERE, por que este no trabaja con grupos, el WHERE trabaja con
filas de registros. La clusula HAVING si puede condicionar
grupos.
Ejercicios:
#Seleccionar las materias que tienen mas de 80 estudiantes en la
actual gestin(2005).
SQL>select sigla,count(sigla)
from nota
where (gestion=2005)
group by sigla
having count(*) > 80;

Lic. Octavio Aguilar M. 50


#Seleccionar al estudiante que cursan mas de 7 materias en la
gestin actual(2005).
SQL>select ru,count(sigla)
from nota
where (gestion=2005)
group by ru
having count(*) > 7;

#seleccionar la Materia que tiene mas estudiantes en la gestin


actual(2005)
SQL>select x.sigla, count(*)
from nota x
where x.gestion=2005
having (count(*)+1
> all
(select count(*)
from nota A
where A.gestion=2005
group by A.sigla
)
)
group by x.sigla;

CONSULTAS CON MLTIPLES TABLAS.


Unin Simple.-El operador ms usado para unir mas de una tabla es
el operador igual(=).
Ejercicios:
#listar a los estudiantes con sus respectivos telfonos.
SQL>select A.nombre, A.ap, t.numero
from alumno A, telefonos T
where (A.ru=T.ru);

Lic. Octavio Aguilar M. 51


#Seleccionar a todos los estudiantes con las materias que cursa
en la gestin 2005.
SQL>select A.nombre, A.ap, M.nombre
from alumno A, nota N, Materia M
where (A.ru=N.ru)and(N.sigla=M.sigla)and
(N.gestion=2005);
En este ejemplo se esta uniendo 3 tablas.
TRANSACCIONES.
Una transaccin est formada por una serie de instrucciones DML.
Una transaccin comienza con la primera instruccin DML que se
ejecute y finaliza con alguna de estas circunstancias:
Una operacin COMMIT o ROLLBACK
El usuario abandona la sesin
Cada del sistema
Commit.- La instruccin COMMIT hace que los cambios
realizados por la transaccin sean definitivos,
irrevocables. Solo se debe utilizar si estamos de acuerdo
con los cambios, conviene asegurarse mucho antes de
realizar el COMMIT ya que las instrucciones ejecutadas
pueden afectar a miles de registros. Adems el cierre
correcto de la sesin da lugar a un COMMIT, aunque siempre
conviene ejecutar explcitamente esta instruccin a fin de
asegurarnos de lo que hacemos
Rollback.- Esta instruccin regresa a la instruccin
anterior al inicio de la transaccin, normalmente el ltimo
COMMIT, la ltima instruccin DDL o DCL o al inicio de
sesin. Anula definitivamente los cambios, por lo que
conviene tambin asegurarse de esta operacin. Un abandono
de sesin incorrecto o un problema de comunicacin o de
cada del sistema dan lugar a un ROLLBACK implcito.

Ejercicios Resueltos:
alumno(ru,nombre,ap,am,est_civil,genero)
materia(sigla,nombre,nivel)
nota(ru,sigla,gestion,pa1,pa2,pa2)
telefono(ru,numero)

Lic. Octavio Aguilar M. 52


profesion(codf,nombre)
empleado(ci,nombre,ap,codf)
En base a las tablas definidas previamente, realizar las
siguientes consultas:
#Seleccionar a estudiantes no tienen telfonos
SQL> select *
from jose.alumno
where ru NOT IN ( select ru
from jose.telefono
);
#seleccionar a todos los empleados con sus respectivas
profesiones.
SQL>select A.ci, A.nombre, A.ap, B.nombre
from jose.empleado A, jose.profesion B
where (A.codf=B.codf);
#Seleccionar a todos los estudiantes reprobados en la gestin
2005.
SQL>select A.ru, A.nombre, A.ap
from jose.alumno A
where (A.ru IN ( select B.ru
from jose.nota B
where (B.gestion=2005)and
(((B.pa1+B.Pa2+B.pa3)/3)<51)
)
);

Lic. Octavio Aguilar M. 53


#Seleccionar la materia que menos estudiantes tiene. (gestin
2005)
SQL> select x.sigla,count(*)
from jose.nota x
where (x.gestion=2005)
having ( count(*)-1
< ALL
( select count(*)
from jose.nota A
where (A.gestion=2005)
group by A.sigla
)
)
group by x.sigla;
#Seleccionar a todos los estudiantes(nombres, ap) con sus
respectivas cantidades de materias que cursan en la gestin
2005.
SQL>select MAX(A.nombre),MAX(A.ap),COUNT(*)
from jose.alumno A,jose.nota B
where (A.ru=B.ru)and(B.gestion=2005)
group by A.ru;
#Seleccionar a todos los estudiantes que no programaron Materias
en la gestin 2004.
SQL>select ru, nombre, ap
from jose.alumno
where ru NOT IN ( select ru
from jose.nota
where (gestion=2004)
);
#Cuantos estudiante no tienen telfonos.
SQL>select COUNT(*)
from jose.alumno
where ru NOT IN ( select ru
from jose.telefono
);
#Seleccionar la Nota Mxima de todas las materias en la gestin
2005.
SQL>select MAX((pa1+pa2+pa3)/3)
from jose.nota
where (gestion=2005);

Lic. Octavio Aguilar M. 54


#Listar cuantas materias no fueron programadas en la gestin
2005.
SQL>select COUNT(*)
from jose.materia
where sigla NOT IN ( select sigla
from jose.nota
where (gestion=2005)
);
#Cuantos estudiantes obtuvieron la nota Mxima en la gestin
2005. La funcin DISTINCT excluye a estudiantes repetidos.
SQL>select COUNT(DISTINCT ru)
from jose.nota
where ((pa1+pa2+pa3)/3)=
( select MAX((pa1+pa2+pa3)/3)
from jose.nota
where (gestion=2005)
);
#Cuantos estudiantes en la gestin 2005, materia INF-111 superan
en la nota final al estudiante con RU 111.
SQL>select COUNT(*)
from jose.nota
where (ru<>111)and
(sigla='INF-111')and
(gestion=2005)and
((pa1+pa2+pa3)/3) > ( select ((pa1+pa2+pa3)/3)
from jose.nota
where (gestion=2005)and
(sigla='INF-111')and
(ru=111)
);
#Cuantos estudiantes existen con apellidos que comiencen con A o
que terminen con "o"
SQL>select COUNT(*)
from jose.alumno
where (upper(ap) LIKE 'A%')or
(lower(ap) LIKE '%o');

Lic. Octavio Aguilar M. 55


CAPITULO
SQL PARA AGREGACIONES 5
Introduccin.
La agregacin es una fundamental parte de un Datawarehouse(DW).
Para mejorar el rendimiento el un DW, Oracle provee de las
siguientes extensiones de la clusula GROUP BY :
o CUBE and ROLLUP son extensiones de la clusula GROUP BY.
o Funciones GROUPING
El CUBE, ROLLUP y GROUPING SETS son extensiones del SQL hechos
para consultas y reportes cmodos y rpidos. ROLLUP calcula
agregaciones semejante como SUM, COUNT, MAX, MIN, y AVG y
aumentar de esta forma los niveles de agregacin. CUBE es una
extensin similar a ROLLUP, habilitando un proceso que permite
el clculo de toda posible combinacin de agregacin. CUBE puede
generar cruce de informacin tabulada con una simple consulta.
CUBE, ROLLUP, y el GROUPING SETS permiten especificar
exactamente los grupos de inters en la clusula GROUP BY.
Ellos permiten un eficiente anlisis a travs de mltiples
dimensiones fuera del rendimiento de una operacin de un cubo.
Para incrementar el rendimiento del, CUBE, ROLLUP, y GROUPING
SETS puede estar paralelizado : mltiples procesos pueden estar
simultneamente ejecutando todas esas presentaciones. Esas
capacidades implementadas para el calculo de agregaciones mas
eficientes, incrementa el rendimiento y escalabilidad.

Analizando a travs de mltiples dimensiones.


Uno de los principales conceptos en los sistemas de ayuda a la
toma de decisiones es el anlisis multidimensional: examinando
de la empresa de todas las combinaciones de dimensiones
necesarias. Se usa el termino DIMENSION para indicar alguna
categora usado en el cuestionario de especificacin. Entre las
dimensiones ms comunes estn el tiempo, geografa, productos,
departamentos, y distribuidoras, pero entre las dimensiones ms
importantes estn en las actividades de la empresa. los Hechos

Lic. Octavio Aguilar M. 56


pueden estar en unidades, moneda, cuentas de usuarios, volumen
de produccin.
Se pueden recuperar rebandas de datos de los cubos.

ROLLLUP extension de GROUP BY.


ROLLUP declarado en un SELECT para calcular mltiples niveles de
subtotales a travs de una especificacin de grupos de
dimensiones. Tambin calcula totales generales. ROLLUP es una
extensin simple de la clusula GROUP BY, su sintaxis es fcil
de usar. ROLLUP es una extensin altamente eficiente,
adicionando superioridad a sus consultas.
Usar ROLLUP es un proceso que retorna subtotales.

ROLLUP aparece en la clusula GROUP BY .....en la declaracin


SELECT :

SELECT ... GROUP BY ROLLUP(referencia de grupos de columnas)

CUBE extension para GROUP BY


CUBE toma las columnas agrupadas y crea subtotales para todas
las posibles combinaciones. En trminos de anlisis
multidimensional, el CUBE genera todos los subtotales calculados
para un dato cubo con la especificacin de dimensiones.
Si se tiene especificado un CUBO(tiempo, regin, departamento),
el resultado es similar al ROLLUP mas los totales de las
combinaciones.
Se considera usar CUBE en situaciones de requerimiento de
reportes con cruces tabulares, y puede ser generado por un
simple SELECT usando CUBE. ROLLUP y CUBE son de completa ayuda
para la generacin de tablas resmenes
Un CUBE parcial puede parecerse a ROLLUP, la consulta seria de
esta forma :
GROUP BY expre1, CUBE(expre2, expre3)

Algunas Funciones.

Lic. Octavio Aguilar M. 57


Funcin NVL.- NVL(x1,x2)
Es una funcin que trabaja con valore nulos. La funcin NVL
retorna x2 si x1 es nulo, si x1 no es nulo entonces retorna x1.
Funcin DECODE.- DECODE(<x>, <m1>,<r1>{,<m2>,<r2>...}{,<d>}).
Puede usar mltiples argumentos. x es una expresin. m1 es una
expresin comparado con x. Si m1 es equivalente a x entonces se
retorna r1. y de esta forma se compara x con m2,m3 y el
resultado es r2,r3 respectivamente.
select DECODE(comando,'0','ninguno',
'1','seleccion',
'2','insercion',
'3','borrado') instrucion
from tabla;

Creando superagregaciones con CUBE y ROLLUP.


El CUBE y ROLLUP modifica la clusula GROUP BY permitiendo la
creacin de agregaciones sobre agregacin, o superagregaciones.
ROLLUP crea jerarquas agregadas. CUBE crea agregaciones para
todas las combinaciones de columnas especificadas. Las
principales ventajas de CUBE y ROLLUP estn en que ellos pueden
permitir robustas agregaciones.
Analizar los siguientes Ejemplos :
select genero gen,nvl(e_civil,'nada'),count(*)
from cliente
group by genero, nvl(e_civil,'nada');

select genero gen, nvl(e_civil,'nada') estado_civil,count(*)


from cliente
group by genero,rollup(nvl(e_civil,'nada'));

select genero gen, nvl(e_civil,'nada') estado_civil,count(*)


from cliente
group by rollup (nvl(e_civil,'nada'),genero);

Lic. Octavio Aguilar M. 58


select genero gen, nvl(e_civil,'nada') estado_civil,count(*)
from cliente
group by cube(genero,nvl(e_civil,'nada'));

GROUPING
El GROUPING(x) toma un simple argumento, donde 'x' es una
expresin de GROUP BY en la consulta. el GROUPING es aplicable
solo a consultas que tienen la clusula GROUP BY, ROLLUP o CUBE.
La funcin GROUPING retorna 1 si se genera un resumen, y 0
cuando no existe resumen.
Ejem: La presente consulta muestra con 1 las filas de resumen y
0 las que no son.
select ecivil,count(*),grouping(ecivil)
from alumno
group by cube(ecivil)

La expresion CASE.
La expresin CASE es nuevo en Oracle9i y puede ser usado con
IF.. THEN.. ELSE.
Sintaxis:
CASE
WHEN THEN ... .. ..
[ELSE ]
END

Lic. Octavio Aguilar M. 59


Ejm: Se tiene la tabla alumno(ci, nombre, ap, ecivil), ecivil
almacena nmeros como 1, 2 y 3, equivalentes a [Soltero, casado,
Divorciado] respectivamente. Se necesita visualizar el resultado
en trminos de Textuales segn la semntica de cada numero de
ecivil.

SELECT NOMBRE, ECIVIL,CASE ECIVIL WHEN 1 THEN 'Soltero'


WHEN 2 THEN 'Casado'
ELSE 'Divorciado'
end estado
FROM ALUMNO

SELECT gestion,sigla, CASE WHEN pa1 < 51 THEN 'Reprobado'


WHEN pa1 >=51 THEN 'Aprobado'
end Observacion
FROM nota

Operadores UNION, UNION ALL, INTERSECT, MINUS


Este conjunto de operadores pueden ser usados por mltiples
tablas, estos combinan el resultado de dos consultas en uno.
UNION.- Retorna todas las filas nicas seleccionadas de ambas
consultas
Ejemplo :
select *
from alumno
where ecivil=1
UNION
select *
from alumno
where ecivil=2

Lic. Octavio Aguilar M. 60


UNION ALL.- Selecciona todas las filas incluyendo Duplicados en
ambas consultas.
Ejem:
select *
from alumno
where ecivil=1
UNION ALL
select *
from alumno
where ecivil=1

INTERSECT .- Selecciona el resultado en ambas consultas


Ejem:
select *
from alumno
INTERSECT
select *
from alumno
where ecivil=1

MINUS .-Retorna
la filas nicas que estn en la primera
consulta pero que no estn en la segunda consulta.
Ejem:
select *
from alumno
MINUS
select *
from alumno
where ecivil=1

Subconsulta Escalar en una Clusula SELECT.


Este tipo de consultas usa subconsultas en la clusula SELECT.

Lic. Octavio Aguilar M. 61


Ejemplo: Este ejemplo calcula las notas mximas de cada
Estudiante :
select z.ci,z.nombre,z.ap,z.ecivil,(
select max(pa1)
from nota x
where x.ru=z.ci) notita
from alumno z

Lic. Octavio Aguilar M. 62


CAPITULO
BASE DE DATOS OBJETO RELACIONAL ORACLE 9i 6

INTRODUCCION.
Debido a los requerimientos de la nuevas aplicaciones, en su
octava versin, el sistema de gestin de bases de datos
relacionales Oracle ha sido significativamente extendido con
conceptos de Modelo de Base de datos orientada a objetos. De
esta manera, aunque las estructura de datos que se utilizan
para almacenar la informacin siguen siendo tablas, los usuarios
pueden utilizar muchos de los mecanismos de orientacin a
objetos para definir y acceder a los datos. Por esta razn, se
dice que se trata de un modelo de datos objeto-relacional.
Oracle 9i proporciona mecanismos para que el usuario pueda
definir sus propios tipos de datos, cuya estructura puede ser
compleja, y que se pueden aplicar para asignar un tipo a una
columna de una tabla. Tambin reconoce el concepto de objetos,
de tal manera que un objeto tiene un tipo, se almacena en cierta
fila de cierta tabla y tiene un identificador nico (OID). Estos
identificadores se pueden utilizar para referenciar a otros
objetos y as representar relaciones de asociacin y de
agregacin. Oracle 9i tambin proporciona mecanismos para
asociar mtodos a tipos, y constructores para disear tipos de
datos multivaluados(colecciones) y tablas anidadas. La mayor
diferencia de este sistema es la imposibilidad de definir
jerarquas de especializacin y herencia, lo cual es una
importante desventajas con respecto a las bases de datos
orientadas a objetos puras.
TIPOS DE DATOS DEFINIDOS POR EL USUARIO
Los usuarios de Oracle 9i pueden definir sus propios tipos de
datos, pudiendo ser de dos categoras: tipos de objetos(Object
type) y tipos para colecciones(collection types). Para construir
los tipos de usuario se utilizan los tipos bsicos provistos por
el sistema y otros tipos de usuarios previamente definidos. Un

Lic. Octavio Aguilar M. 63


tipo define una estructura y un comportamiento comn para un
conjunto de datos de las aplicaciones.
TIPOS DE OBJECTOS
Un tipo de objetos representa a una entidad del mundo real. Un
tipo de objetos se compone de los siguientes elementos:
- Un nombre que sirve para identificar el tipo de los
objetos.
- Unos atributos que modelan la estructura y los valores de
los datos de ese tipo. Cada atributo puede ser un tipo de
datos bsicos o de un tipo usuario.
- Unos mtodos que son procedimientos o funciones escritos en
el lenguaje PL/SQL (almacenados en la base de datos), o
escritos en C (almacenados externamente).
Los tipos de objetos pueden interpretarse como plantillas a las
que se adaptan los objetos de ese tipo. A continuacin se da un
ejemplo de cmo definir el tipo de objetos DIRECCIN en lenguaje
de definicin de datos de Oracle 9i, y como utilizar este tipo
de datos para definir el tipo de datos de los objetos de la
clase de CLIENTE_T.

1.- Crear un Objeto DIRECCION.


SQL> CREATE TYPE direccion AS OBJECT (
calle varchar(100),
zona varchar(50)
);
CONSTRUCTORES DE TIPO.-
En Oracle, todos los tipos de objetos tienen asociado por
defecto un mtodo que construye nuevos objetos de ese tipo de
acuerdo a la especificacin del tipo . El nombre del mtodo
coincide con el nombre del tipo, y sus parmetros son los
atributos del tipo.
TABLAS DE OBJETOS.-
Despus de definir los tipos, estos pueden utilizarse para
definir otros tipos, tablas que almacenen objetos de esos tipos,
o para definir el tipo de los atributos de una tablas, Una tabla

Lic. Octavio Aguilar M. 64


de objetos es una clase especial de tabla que almacena un objeto
en cada fila y que facilita el acceso a los productos de esos
objetos como si fueran columnas de la tabla.
2.- Como listar un objeto creado ?
SQL> select object_name, object_type from obj;
El resultado de esta consulta son dos columnas, el nombre del
objeto y el tipo de objeto, si es que tuviese algun otro tipo
de objeto se desplegaran en esta consulta.
3.- Como se puede ver la estructura de un objeto ?
SQL> desc direccion;
De esta forma vemos la estructura de datos de un objeto o
tabla
4.- Como podemos eliminar un objeto ?
SQL> drop type direccion;
De esta forma eliminamos el objeto DIRECCION
Los objetos se utilizan como tipos de datos.
5.- Definir el Objeto DIRECCION como un tipo de datos de la
tabla ALUMNO.
SQL> create table alumno(
ru varchar(10) not null primary key,
nombre varchar(50),
ap varchar(50),
am varchar(50),
direc direccion );
La tabla ALUMNO tiene una columna direc que es un atributo
de tipo direccin(objeto)

Se pueden considerar las tablas de objetos desde dos puntos de


vista :
Como una Tabla con una sola columna cuyo tipo es el de un
tipo de objetos

Lic. Octavio Aguilar M. 65


Como una tabla que tiene tantas columnas como atributos los
objetos que almacenan.
6.- Como se crea una tabla con una sola columna de objetos.
Por ejemplo si consideramos crear un objeto ALUMNO
SQL> create type alumno as object (
ru varchar(15),
nombre varchar(50),
ap varchar(50),
am varchar(50)
);
Como ya se creo el objeto ALUMNO, procedemos definir el objeto
como una columna de la tabla TALUMNO
SQL> create type talumno as table of alumno;
7.- Como una tabla puede definir un objeto como tipo definido.
Por ejemplo si consideramos crear un objeto lugar de
nacimiento llamado LUG_NAC
SQL> create type lug_nac as object (
dpto varchar(50),
pais varchar(50)
);
Tambin se pueden realizar modificaciones sobre la estructura
de un objeto.
Se pueden adicionar atributos.
SQL> alter type lug_nac add atribute lugar varchar(40);
Eliminar atributos.
SQL> alter type lug_nac drop atribute lugar;
Finalmente compilar o actualizar las modificaciones.
SQL> alter type lug_nac compile;

Lic. Octavio Aguilar M. 66


Como ya se cre el objeto LUG_NAC, procedemos a definir el
objeto como un tipo de dato definido, para la columna
lugar_nacde la tabla TALUMNO
SQL> create table talumno (
ru varchar(10) not null primary key,
nombre varchar(50),
ap varchar(50),
lugar_nac lug_nac
);
8.- Una tabla puede Definir clave primaria con atributo del
objeto.
Si consideramos el objeto ALUMNO creado en la pregunta 6,
podemos definir una tabla con ru como clave principal:
SQL> create table Talumno of alumno (
ru primary key
);
Las reglas de Integridad de clave primaria, y el resto de
propiedades que se definan sobre una tabla, solo afectan a los
objetos de esa tabla.
ANIDANDO TABLAS.-
9.- Como creamos tablas anidadas ?
Crearemos un objeto ARTICULOS, luego una tabla ARTICULOS_T,
finalmente crearemos un objeto PEDIDO y referenciar a
ARTICULOS_T como un tipo de dato.
SQL> create type articulos as object (
nombre varchar(30),
cantidad integer,
precio flota
);
Creamos la tabla ARTICULOS_T que contiene al objeto ARTICULOS.
SQL> create type articulos_t as table of articulos;

Lic. Octavio Aguilar M. 67


Ahora los anidamos en otro objeto PEDIDO, el mismo que tiene
un mtodo OBTENER_PRECIO.
SQL> create type pedido as object (
codp integer,
detalle_art articulos_t,
member function obtener_precio return float
);
SQL> create table tpedido (
Primary key(codp)
) nested table detalle_art store as pedido_tab;
CLAVES EN LOS OBJETOS.
10.- Como asignamos claves a los objetos ?
Crearemos un objeto DIRECCION, luego otro objeto ESTUDIANTE,
finalmente definiremos una tabla PERSONAS que tomara como
clave un atributo del objeto ESTUDIANTE.
SQL> create type direccion as object (
calle varchar(100),
barrio varchar(100)
);
SQL> create type estudiante as object (
ru integer ,
nombre varchar(50),
ap varchar(50),
dir direccion
);
SQL> create table personas of estudiante (
ru primary key );
Para insertar datos en la tabla personas :
SQL> insert into personas
values(111,
'Juan','Paez',direccion('Bolivar','Zona XYZ'));
Para listar datos de la tabla personas :
SQL> select * from personas;

Lic. Octavio Aguilar M. 68


RESTRICCIONES SOBRE VALORES DE OBJETOS.
11.- Como asignar restriccin a valores de objetos?
Consideramos que tenemos creado el Objeto DIRECCION del
ejercicio 10. En este ejercicio se esta restringiendo a que la
calle y el barrio sean nicos y calle no acepte nulos.
SQL> create table administrativos (
ci integer ,
nombre varchar(50),
ap varchar(50),
dir direccion,
CONSTRAINT dir_1
unique (dir.calle, dir.barrio)
CONSTRAINT dir_2
check (dir.calle is not null)
);
REFERENCIAS ENTRE OBJETOS.-
Los identificadores nicos asignados por Oracle a los objetos
que se almacenan en una tabla, permiten que estos puedan ser
referenciados desde los atributos de otros objetos o desde
las columnas de las tablas. El tipo de datos proporcionado por
Oracle para soportar esta facilidad se denomina REF. Un
atributo de tipo REF almacena una referencia a un objeto del
tipo definido, e implementa una relacin de asociacin entre los
dos tipos de objetos. Estas referencias se pueden utilizar para
acceder a los objetos referenciados y para modificarlos, sin
embargo no es posible operar sobre ellas directamente. Para
asignar o catalizar una referencia se debe utilizar siempre REF
o NULL.
Cuando se define una columna de un tipo REF, es posible
restringir su dominio a los objetos que se almacenan en cierta
tabla. Si la referencia no se asocia a una tabla si no que slo
se restringe a un tipo de objeto, se podr actualizar a una
referencia a un objeto del tipo adecuado independientemente de
la tabla donde se almacene. En este caso su almacenamiento
requerir mas espacio y su acceso ser menos eficiente. El
siguiente ejemplo define un atributo de tipo REF y restringe su
dominio a los objetos de cierta tabla.

Lic. Octavio Aguilar M. 69


Tipo REF

Permite hacer referencia a OID de Objetos


almacenados en otras tablas

Se puede restringir a objetos de una tabla concreta


Cuando se borran objetos no se mantiene restricciones de
integridad (dangling references)

Existe el predicado IS DANGLING para comprobar si el


objeto referenciado se ha eliminado
12.- Como creamos estas referencias ?
Crearemos un objeto DIRECCION sobre la tabla DIRECCION_T,
luego crearemos un objeto ESTUDIANTE el mismo que har
referencia al objeto DIRECCION. El objeto ESTUDIANTE estar
sobre ESTUDIANTE_T
SQL> create type direccion as object (
calle varchar(100),
barrio varchar(100) );
SQL> create table direccion_t of direccion;
SQL> create type estudiante as object (
ci integer,
nombre varchar(50),
ap varchar(50),
dir REF direccin );
Tambin utilizamos la restriccin SCOPE FOR para indicar el
alcance del campo
SQL> create table estudiante_t of estudiante (
primary key(ci),
scope for (dir) is estudiante_t );
13.- Como insertamos datos a objetos referenciados con REF ?
Primero insertamos datos a la tabla DIRECCION_T (del objeto
DIRECCION)
SQL> insert into direccion_t values('espaa','El tejar');

Lic. Octavio Aguilar M. 70


Ahora insertamos datos en la tabla ESTUDIANTE_T que har
referencia a una direccin
SQL> insert into estudiante_t
select 111, 'Juan', 'Paez', REF(x)
from direccion_t x
where x.calle='espaa';
14.- Como listamos datos referenciados con REF ?
Para listar datos utilizamos el operador DEREF para el acceso
a un objeto referenciado.
SQL> select nombre, DEREF(dir)
from estudiante_t;
METODOS.-
La especificacin de un mtodo se hace junto con la creacin de
su tipo, y debe llevar siempre asociada una directiva de
compilacin (PRAGMA RESTRICT_REFERENCES), para evitar que los
mtodos manipulen la base de datos o las variables del paquete
PL/SQL. Tienen el siguiente significado.
- WNDS.- no se permite al mtodo modificar las tablas
- WNPS.- no se permite al mtodo modificar las variables del
paquete PL/SQL.
- RNDS.- no se permite al mtodo leer las tabls de la BD
- RNPS.- no se permite al mtodo leer las variables del
paquete PL/SQL
Los mtodos se pueden ejecutar sobre los objetos de su mismo
tipo. Si x es una variable PL/SQL que almacena objetos del tipo
CLIENTE, entonces x.edad() calcula la edad del cliente
almacenado en x. La definicin del cuerpo de un mtodo en PL/SQL
se hace de la siguiente manera :

Lic. Octavio Aguilar M. 71


15.- Como creamos los mtodos de los objetos ?
Para definir mtodos, comenzaremos definiendo un objeto
ESTUDIANTE que tendr un mtodo llamado CURSO_ACTUAL, luego
creamos el cuerpo del mtodo, finalmente lo definimos en una
tabla PERSONA.
SQL> create or replace type estudiante as object (
ru integer,
nombre varchar(50),
ap varchar(50),
member function curso_actual return integer,
pragma restrict_references(curso_actual,WNDS)
);
SQL> create or replace type body estudiante as
member function curso_actual return integer is
begin
return 123;
end;
end;
Tambin se pueden modificar la estructura de los objetos
adicionando mtodos.
SQL> alter type estudiante add member function lista_est
return integer;
SQL> create table persona of estudiante;
SQL> insert into persona values(111,'Juan','Paez');
16.- Como ejecutamos un mtodo?
Para el mtodo definido en la pregunta anterior, su ejecucin
es de la siguiente forma:
SQL> select p.curso_actual()
from persona p;
Si el objeto estara definido sobre un atributo seria :
SQL> select nombre_alias.atributo.metodo()
from persona nombre_alias;

Lic. Octavio Aguilar M. 72


TIPOS PARA COLECCIONES.-
Para poder implementar relaciones 1:N, en Oracle 8 es posible
definir tipos para colecciones. Un dato de tipo coleccin est
formado por un nmero indefinido de elementos, todos del mismo
tipo. De esta manera en un atributo es posible almacenar un
conjunto de tuplas en forma de array (VARRAY), o en forma de
tabla anidad.
Al igual que los tipos para objetos, los tipos para colecciones
tambin tienen por defecto unas funciones constructoras de
colecciones cuyo nombre coincide con el del tipo.
Los argumentos de entrada de estas funciones so el conjunto de
elementos que forman la coleccin separados por comas y entre
parntesis, y el resultado es el valor del tipo collecin. En
Oracle es posible diferenciar entre un valor nulo y una
coleccin vaca. Para construir una coleccin sin elementos se
puede utilizar al funcin constructora del tipo seguida por dos
parntesis sin elementos dentro.
Tipo VARRAY.-
Un array es un conjunto ordenado de elementos dentro del mismo
tipo. Cada elemento tiene asociado un ndice que indica su
posicin dentro del array. Oracle permite que los VARRAY sean
de longitud variable, aunque es necesario especificar un
tamao mximo cuando se declara el tipo VARRAY.
17.- Como usamos VARRAY para las colecciones ?
Definiremos un VARRAY que almacene telfonos llamado
TELEFONOS, luego crearemos un objeto ESTUDIANTE, el mismo que
definir como un tipo de dato a un VARRAY llamado TELEFONOS.
SQL> create type telefonos as varray(10) of varchar(15);
SQL> create or replace type estudiante as object (
ru integer,
nombre varchar(50),
ap varchar(50),
telf telefonos
);

Lic. Octavio Aguilar M. 73


Creamos la tabla TESTUDIANTE que contiene al objeto ESTUDIANTE
SQL> create table testudiante of estudiante;
Insertamos Datos.
SQL> insert into testudiante
values(111,'juan','paez',
telefonos('123','124','125','126') );
Modificamos datos de telfonos para el estudiante con ci=111.
SQL> update testudiante
set telf=telefonos('11','22','33')
where ru=111;
Listamos datos de la tabla TESTUDIANTE.
SQL> select *
from testudiante;
La principal limitacin que presenta los tipos VARRAY es que en
las consultas es imposible poner condiciones sobre los elementos
almacenados dentro. Desde una consulta SQL, los valores de un
VARRAY solamente pueden ser accedidos y recuperados en un
bloque. Es decir no se puede acceder a los elementos de un
VARRAY individualmente. Sin embargo desde un programa PL/SQL si
que es posible definir un bucle que itere sobre los elementos de
un VARRAY.

TABLAS ANIDADAS.
Una tabla anidad es un conjunto de elementos del mismo tipo sin
ningn orden predefinido.
Estas tablas solamente pueden tener una columna que puede ser de
un tipo de datos bsico de Oracle, o de un tipo de objetos
definido por el usuario. En este ltimo caso, la tabla anidada
tambin puede ser considerada como una tabla con tantas columnas
como atributos tenga el tipo de objetos.
18.- Como definimos tablas anidadas para las colecciones ?
Para demostrar que con tablas anidadas tambin se puede
realizar el ejercicio anterior, entonces definiremos un objeto
TELEFONOS.

Lic. Octavio Aguilar M. 74


SQL> create or replace type telefonos as object (
numero varchar(15));
SQL> create type telefonos_t as table of telefonos;
SQL> create type estudiante as object (
ru integer,
nombre varchar(50),
ap varchar(50),
telf telefonos_t);
Este paso es necesario hacerlo por que la declaracin de una
tabla anidada no reserva ningn espacio para su almacemiento.
Lo que se hace es indicar en que tabla(TELEFONOS_TAB) se deben
almacenar todos los telfonos. Es decir, todos los telfonos
se almacenan externamente en otra tabla especial, el mismo que
es creado automticamente(nested table .... telefonos_tab).
SQL> create table testudiante of estudiante (
primary key(ru)
) nested table telf store as telefonos_tab;

SQL> insert into testudiante


values (111,'juan','paez',
telefonos_t(
telefonos('1111'),
telefonos('2222')
)
);
SQL> select * from testudiante;
SQL> select e.ru, p.*
from testudiante e, table(e.telf) p
where e.ru=111;
Para relacionar las tuplas de una tabla anidada con la tupla a
la que pertenecen se utiliza una columna oculta que aparece en
la tabla anidada por defecto. Todas las tuplas de una tabla
anidada que pertenecen a la misma tupla tienen el mismo valor
en esta columna(NESTED_TABLE_ID).
Al contrario que los VARRAY, los elementos de las tablas
anidadas si pueden ser accedidos individualmente, y es posible
poner condiciones de recuperacin sobre ellos.

Lic. Octavio Aguilar M. 75


HERENCIA.
A partir de la versin 9i
Solo herencia simple
Se pueden redefinir mtodos
Al definir el objeto hay que definir su otros pueden
heredar de el mediante la clausula NOT FINAL.
Los mtodos tambin pueden se FINAL (no redefinibles) o
NOT FINAL(redefinibles)
Los subtipos se crean con la clusula UNDER
Para redefinir un tipo se hace con la clusula OVERRIDING
Un mtodo se puede definir como no instanciable cuando
esa clase no lo implementa pero su sus hijos.
SQL> create type estudiante as object (
ru integer,
not instatiable member function lista_curso
return integer
) not instantiable not final;
Soporta sobrecarga de metidos.

Lic. Octavio Aguilar M. 76


19.- Como se aplica la herencia de clases ?
Para aplicar la herencia consideraremos este modelo de clases :

PERSONA
----------------------------
CI : INTEGER
NOMBRE : STRING
AP : STRING

---------------------------
LISTA_PER() : INTEGER

DOCENTE ESTUDIANTE
---------------------------- ----------------------------
ESPECIALIDAD : STRING RU : INTEGER

--------------------------- ---------------------------
LISTA_DOC() : INTEGER LISTA_PER() : INTEGER

Definimos el Objeto padre o super tipo PERSONA


SQL> create or replace type persona as object (
ci integer,
nombre varchar(50),
ap varchar(50),
member function lista_per return integer,
pragma restrict_references(lista_per,wnds)
) not final;
Definimos los Objetos hijos ESTUDIANTE y DOCENTE
SQL> create or replace type estudiante under persona (
ru integer,
member function lista_es return integer,
pragma restrict_references(lista_es,wnds)
);
SQL> create or replace type docente under persona (
especialidad varchar(50),
member function lista_doc return integer,
pragma restrict_references(lista_doc,wnds)
);

Lic. Octavio Aguilar M. 77


Verificamos como qued el Objeto ESTUDIANTE, y el resultado es
que ESTUDIANTE heredo los atributos y el/los mtodos.
SQL> desc estudiante
ESTUDIANTE extends OCTAVIO.PERSONA
Name Null? Type
----------------------------------------- -------- -------
---------------------
CI
NUMBER(38)
NOMBRE
VARCHAR2(50)
AP
VARCHAR2(50)
RU
NUMBER(38)

METHOD
------
MEMBER FUNCTION LISTA_PER RETURNS NUMBER

METHOD
------
MEMBER FUNCTION LISTA_ES RETURNS NUMBER

Lo mismo que el anterior, verificamos la estructura del objeto


DOCENTE
SQL> desc docente
DOCENTE extends OCTAVIO.PERSONA
Name Null? Type
----------------------------------------- -------- -------
---------------------
CI
NUMBER(38)
NOMBRE
VARCHAR2(50)
AP
VARCHAR2(50)

Lic. Octavio Aguilar M. 78


ESPECIALIDAD
VARCHAR2(50)

METHOD
------
MEMBER FUNCTION LISTA_PER RETURNS NUMBER

METHOD
------
MEMBER FUNCTION LISTA_DOC RETURNS NUMBER

Ahora definimos las tablas TESTUDIANTE para el objeto


ESTUDIANTE y TDOCENTE para el objeto DOCENTE
SQL> create table testudiante of estudiante;
SQL> create table tdocente of docente;
Ahora definimos el cuerpo de los mtodos de los objetos
PERSONA, ESTUDIANTE y DOCENTE
SQL> create or replace type body persona as
member function lista_per return integer is
begin
return 1122;
end;
end;
SQL> create or replace type body estudiante as
member function lista_es return integer is
begin
return 22222;
end;
end;
SQL> create or replace type body docente as
member function lista_doc return integer is
begin
return 999;
end;
end;
Ahora ejecutamos los mtodos del Objeto DOCENTE definidos en
la tabla TDOCENTE
SQL> select p.lista_per() from tdocente p;

Lic. Octavio Aguilar M. 79


SQL> select p.lista_doc() from tdocente p;
LISTAR LAS SIGUIENTES TABLAS :
USER_TYPE_METHODS .-Describe los mtodos
USER_METHOD_PARAMS.- describe los parmetros de los mtodos
USER_METHOD_RESULTS.- describe los resultados de los mtodos
USER_SOURCE.- Cdigos fuentes de todos los objetos de los
usuarios

Lic. Octavio Aguilar M. 80


E J E R C I C I O S
1.- El siguiente modelo de clases describe al sistema de
programacin de materias, donde se define la clases ESTUDIANTE,
PROGRAMACION y MATERIA.

ESTUDIANTE PROGRAMACION MATERIA


---------------------------- ---------------------------- ----------------------------
CI : INTEGER GESTION : INTEGER SIGLA : STRING
NOMBRE : STRING ESTUD : ESTUDIANTE NOMBRE : STRING
1 1
AP : STRING * MATER : MATERIA * NIVEL : ENTERO

--------------------------- --------------------------- ---------------------------


CURSO_ACTUAL:INTEGER LISTA_MAT : INTEGER

La definicin en Oracle seria de la siguiente forma :


SQL> CREATE OR REPLACE TYPE ESTUDIANTE AS OBJECT (
RU INTEGER,
NOMBRE VARCHAR(50),
AP VARCHAR(50),
MEMBER FUNCTION CURSO_ACTUAL RETURN INTEGER,
PRAGMA RESTRICT_REFERENCES(CURSO_ACTUAL,WNDS));
/
SQL> CREATE OR REPLACE TYPE MATERIA AS OBJECT (
SIGLA VARCHAR(10),
NOMBRE VARCHAR(50),
NIVEL INTEGER,
MEMBER FUNCTION LISTA_MAT RETURN INTEGER,
PRAGMA RESTRICT_REFERENCES(LISTA_MAT,WNDS));
/
SQL> CREATE OR REPLACE TYPE PROGRAMACION AS OBJECT (
GESTION INTEGER,
ESTUD REF ESTUDIANTE,
MATER REF MATERIA,
MEMBER FUNCTION MALLA RETURN INTEGER,
PRAGMA RESTRICT_REFERENCES(MALLA,WNDS));
/
SQL> CREATE TABLE TESTUDIANTE OF ESTUDIANTE;
SQL> CREATE TABLE TMATERIA OF MATERIA;
SQL> CREATE TABLE TPROGRAMACION OF PROGRAMACION (

Lic. Octavio Aguilar M. 81


SCOPE FOR (ESTUD) IS TESTUDIANTE,
SCOPE FOR (MATER) IS TMATERIA);
/

2.- El siguiente modelo de clases describe a un sistema de


control de ventas, donde se jerarquiza al objeto PERSONA como
clase generalizadora o clase padre y como clases especializadas
tenemos a USUARIO Y CLIENTE, estos se relacionan con el objeto
MVENTA que es el maestro de ventas y DVENTA es el detalle de
ventas, se especifica que un usuario puede tener muchos
telfonos, de donde obtenemos el objeto TELEFONOS, en el objeto
PRODUCTO se guardan a todos los productos disponibles para la
venta.

PERSONA
----------------------------
CI : INTEGER
NOMBRE : STRING
AP : STRING

---------------------------
ESTADO_PER(): INTEGER

USUARIO CLIENTE MVENTA DVENTA


---------------------------- ---------------------------- ---------------------------- ----------------------------
LOGIN : STRING NIT : INTEGER CODM : INTEGER CODD : INTEGER
CLAVE : STRING FECHA : DATE CANT : INTERO
1 1
* CLI :CLIENTE * PUNIT : REAL
USU : USUARIO MVEN : MVENTA
--------------------------- --------------------------- PROD : PRODUCTO
LISTA_DOC() : INTEGER BUSCA_CLI() : INTEGER --------------------------- ---------------------------
BUSCA_CLI() : INTEGER CALC_MONTO():INTEGER

1 1 * *

* 1
TELEFONOS PRODUCTO
---------------------------- ----------------------------
NUMERO : STRING CODP : INTEGER
NOMBRE : STRING
PRECIO : REAL

--------------------------- ---------------------------
BUSCA_PRO() : INTEGER

La definicin en Oracle seria de la siguiente forma :


SQL> CREATE OR REPLACE TYPE TELEFONOS AS OBJECT (
NUMERO VARCHAR(15));
/

Lic. Octavio Aguilar M. 82


SQL> CREATE TYPE TELEFONOS_T AS TABLE OF TELEFONOS;
/

SQL> CREATE OR REPLACE TYPE PERSONA AS OBJECT (


CI INTEGER,
NOMBRE VARCHAR(50),
AP VARCHAR(50),
MEMBER FUNCTION ESTADO_PER RETURN INTEGER,
PRAGMA RESTRICT_REFERENCES(ESTADO_PER,WNDS)
) NOT FINAL;
SQL> CREATE OR REPLACE TYPE CLIENTE UNDER PERSONA (
NIT VARCHAR(50),
MEMBER FUNCTION BUSCA_CLI RETURN INTEGER,
PRAGMA RESTRICT_REFERENCES(BUSCA_CLI,WNDS)
);
SQL> CREATE OR REPLACE TYPE USUARIO UNDER PERSONA (
LOGIN VARCHAR(10),
CLAVE VARCHAR(10),
TELF TELEFONOS_T,
MEMBER FUNCTION BUSCA_US RETURN INTEGER,
PRAGMA RESTRICT_REFERENCES(BUSCA_US,WNDS)
);
/
SQL> CREATE TABLE TCLIENTE OF CLIENTE (
PRIMARY KEY(CI));

SQL> CREATE TABLE TUSUARIO OF USUARIO (


PRIMARY KEY(CI)
) NESTED TABLE TELF STORE AS TELEFONOS_TAB;
SQL> CREATE OR REPLACE TYPE MVENTA AS OBJECT (
CODM INTEGER,
FECHA DATE,
CLI REF CLIENTE,
USU REF USUARIO,
MEMBER FUNCTION BUSCA_VEN RETURN INTEGER,
PRAGMA RESTRICT_REFERENCES(BUSCA_VEN,WNDS)
);

SQL> CREATE TABLE TMVENTA OF MVENTA (


PRIMARY KEY(CODM),

Lic. Octavio Aguilar M. 83


SCOPE FOR (CLI) IS TCLIENTE,
SCOPE FOR (USU) IS TUSUARIO);

SQL> CREATE OR REPLACE TYPE PRODUCTO AS OBJECT (


CODP INTEGER,
NOMBRE VARCHAR(50),
PRECIO FLOAT,
MEMBER FUNCTION BUSCA_PRO RETURN INTEGER,
PRAGMA RESTRICT_REFERENCES(BUSCA_PRO,WNDS)
);

SQL> CREATE TABLE TPRODUCTO OF PRODUCTO (


PRIMARY KEY(CODP)
);
SQL> CREATE OR REPLACE TYPE DVENTA AS OBJECT (
CODD INTEGER,
CANT INTEGER,
PUNIT FLOAT,
MVEN REF MVENTA,
PROD REF PRODUCTO,
MEMBER FUNCTION CALCULA_MONTO RETURN INTEGER,
PRAGMA RESTRICT_REFERENCES(CALCULA_MONTO,WNDS)
);
SQL> CREATE TABLE TDVENTA OF DVENTA (
PRIMARY KEY(CODD),
SCOPE FOR (MVEN) IS TMVENTA,
SCOPE FOR (PROD) IS TPRODUCTO
);
SQL> SELECT OBJECT_NAME, OBJECT_TYPE FROM OBJ;
NOMBRE TYPE
-----------------------------------------------------
CLIENTE TYPE
DVENTA TYPE
MVENTA TYPE
PERSONA TYPE
PRODUCTO TYPE
SYS_C002804 INDEX
SYS_C002805 INDEX
SYS_C002806 INDEX
SYS_C002807 INDEX

Lic. Octavio Aguilar M. 84


SYS_C002808 INDEX
SYS_C002809 INDEX
SYS_C002810 INDEX
SYS_C002812 INDEX
SYS_C002813 INDEX
SYS_C002814 INDEX
TCLIENTE TABLE
TDVENTA TABLE
TELEFONOS TYPE
TELEFONOS_T TYPE
TELEFONOS_TAB TABLE
TMVENTA TABLE
TPRODUCTO TABLE
TUSUARIO TABLE
USUARIO TYPE

FUNCIONES Y PREDICADOS
VALUE: esta funcin toma como parmetros un alias de
tabla(de una tabla de objetos) y devuelve instancias de
objetos correspondientes a las filas de la tabla.
REF : es una funcin que toma como parmetro un alias de
tabla y devuelve una referencia a una instancia de un
objeto de dicha tabla.
DEREF : es una funcin que devuelve la instancia del
objeto correspondiente a una referencia que se le pasa
como parmetro.
IS OF : permite formar predicados para comprobar el nivel
de especializacin de instancias de objetos.
TREAT : es una funcin que trata a una instancia de un
supertipo como una instancia de uno de sus subtipos.

Lic. Octavio Aguilar M. 85


CAPITULO
PROCEDIMIENTOS ALMACENADOS Y TRIGGER 7

PROCEDIMIENTOS ALMACENADOS.
Un procedimiento almacenado es un conjunto de instrucciones en
PL/SQL, que pueden ser llamado usando el nombre que se le haya
asignado.
Sintaxis:
CREATE [OR REPLACE] PROCEDURE nombre_proc [(param [IN|OUT|IN
OUT] datatype)...]
[IS|AS] pl/sql_subprograma
El uso de OR REPLACE permite sobrescribir un procedimiento
existente. Si se omite, y el procedimiento ya existe, se
producir un error. Los modificadores IN, OUT, IN OUT indican si
el parmetro es de entrada, salida o ambos.
A continuacin se presenta un ejemplo de creacin de un
procedimiento.

Lic. Octavio Aguilar M. 86


Este procedimiento almacenado llamado ADDALUMNO tiene cuatro
parmetros que corresponden a los datos que se insertan en la
tabla ALUMNO. Esta definicin de procedimiento almacenado se
ejecutar despus del smbolo Slash "/".

Lic. Octavio Aguilar M. 87


Existen 2 formas de ejecutar un procedimientos almacenado:
Esta pantalla muestra las dos formas de ejecutar procedimientos
almacenados, la primera forma utiliza las instrucciones "BEGIN
... END; /" luego pasando como parmetro de entrada los datos
del alumno JUAN. La segunda forma utiliza la instruccin "EXEC
... " con los parmetros de entrada del alumno RAMON, finalmente
se realiza el listado de la tabla ALUMNO, donde se verifica que
el procedimiento almacenado ADDALUMNO insert los datos a la
tabla ALUMNO.

Lic. Octavio Aguilar M. 88


En esta pantalla se muestra el procedimiento almacenado
MIALUMNO, donde el primer parmetro XSW si la operacin es un
INSERT, UPDATE, o DELETE.

Lic. Octavio Aguilar M. 89


Lic. Octavio Aguilar M. 90
CAPITULO
BASE DE DATOS DISTRIBUIDAS CON ORACLE 9i 8
INTRODUCCION.
Inicialmente podemos decir que los Sistemas de Bases de Datos
Distribuidas surgen como respuesta a la distribucin que las
empresas ya tienen, al menos de manera lgica (divisiones,
departamentos, etc) y que en ocasiones tambin tiene de manera
fsica (plantas, fbricas, etc). Todo esto nos lleva a que
posiblemente los datos tambin estn distribuidos, ya que cada
unidad organizacional mantendr los datos con los que
normalmente opere. En definitiva lo que pretende es que la
estructura de la base de datos refleje la estructura de la
empresa (principal beneficio de los sistemas distribuidos).
Una Base de Datos Distribuida es en realidad una Base de Datos
virtual compuesta de varias Bases de Datos reales distintas
que se encuentran en diferentes sitios o lugares distintos.
Por otra parte y con lo que respecta a las implementaciones
comerciales, la mayora de los productos SQL actuales
proporcionan algn tipo de soporte de base de datos distribuida,
con diversos grados de funcionalidad.
- Ingres/Star.
- La opcin de base de datos distribuida de Oracle.
- La propiedad de datos distribuidos de DB2.
- Informix y SQL Server.
Vale la pena resear que todos estos sistemas son relacionales,
adems hay varias razones que iremos descubriendo a lo largo de
este tema, que aconsejan que para que un sistema distribuido sea
exitoso, debe ser relacional.
VENTAJAS Y DESVENTAJAS.
Ventajas:
Favorecer la naturaleza distribuidora de muchas
aplicaciones, no solamente a nivel local si no incluso en
diferentes lugares.

Lic. Octavio Aguilar M. 91


Hay un acercamiento bastante notable a las estructuras
organizacionales de las empresas.
Se consigue una comparticin de los datos, sin perder un
determinado control local.
El rendimiento se mejora. Cuando se distribuye una gran
base de datos por mltiples sitios, las consultas locales y
las transacciones tienen mejor rendimiento porque las bases
de datos locales son ms pequeas. A parte de esta
distribucin, se puede conseguir lo siguiente en estos
sistemas:
o Reducir el nmero de transacciones ejecutndose por sitio.
o Un paralelismo entre las consultas ejecutando varias en
sitios diferentes, o descomponiendo una de ellas en
subconsultas que puedan ejecutarse en paralelo.
Los procesos de expansin se hacen ms sencillos en
nuestro sistema distribuido. Es decir, cuando se
necesita aadir un sitio en nuestro sistema
distribuido, el resto de operaciones que se ejecutan
en los dems no se vern afectados.
La autonoma de estos sistemas es grande.
Desventajas:
Hay una menor seguridad en cuanto al control de acceso a
los datos: control de replicas y errores que puedan
producirse en la red.
Mayor complejidad en el diseo e implementacin del
sistema. Adems si la replicacin de datos no se hace de
forma adecuada, las ventajas se pueden transformar en
desventajas.
Excesivos costes en el intento de conseguir la
transparencia mencionada anteriormente.
Falta de estndares y de experiencia, una vez ms en estos
modelos avanzados de Base de Datos.
No se puede garantizar al 100 % el rendimiento y la
fiabilidad.

Lic. Octavio Aguilar M. 92


Para garantizar las ventajas anteriormente descritas, es
necesario que el software del SGBDD proporcione las siguientes
funciones adicionales a las que un sistema centralizado ya
tiene de por si:
o Capacidad para seguir la pista a la distribucin y
replicacin de los datos en el catlogo del SGBDD.
o Capacidad para acceder a sitios remotos.
o Capacidad de idear estrategias de ejecucin para
consultas y transacciones que tiene acceso a datos de
ms de un sitio.
o Capacidad de recuperarse de cadas de sitios o fallos
de la red.
o Capacidad de decidir a qu copia de un elemento de
datos replicado acceder y de mantener la consistencia
de las copias.
o Gestin del directorio o catlogo distribuido de la
BDD.
o Seguridad, gestin apropiada de seguridad de datos y
los privilegios de autorizacin, acceso de los
usuarios.

ARQUITECTURA CLIENTE/SERVIDOR
Las aplicaciones de bases de datos distribuidas se desarrollan
en el contexto de la arquitectura cliente/servidor. La
arquitectura cliente/servidor se cre para manejar los nuevos
entornos de cmputo en los que un gran nmero de PC, estaciones
de trabajos, servidores de ficheros, impresoras, servidores de
bases de datos, servidores Web y otros equipos estn
interconectados a travs de una red.
En un sistema cliente/servidor tenemos dos partes fundamentales:
Cliente. Se podra corresponder con una mquina usuario que
proporciona capacidad de interfaz al usuario y
procesamiento local.

Lic. Octavio Aguilar M. 93


Servidor. Es una mquina que puede proporcionar a las
mquinas cliente servicios, tales como impresin, acceso a
ficheros, o acceso a la base de datos.
La arquitectura de las Bases de Datos Distribuidas desde el
punto de vista de Oracle es Servidor/Servidor, asi como se
muestra en la Figura XXXX. En un entorno distribuido, se pueden
acceder a bases de datos almacenadas en servidores distintos
(Host) durante una transaccin o consulta individual. Cada
servidor puede estar aislado fsicamente, sin tener que estar
aislado, desde el punto de vista lgico, de los dems
servidores.

BD1

BD2 BD3

Cuando uno de los servidores enva una solicitud de base de


datos a otro servidor, el servidor que enva dicha solicitud
acta como cliente. El servidor que recibe, ejecuta la
instruccin SQL que se le ha pasado y devuelve los resultados,
junto con las condiciones de error al servidor origen.
Oracle Net (conocido anteriormente como SQL *Net y Net8) hace
que esta arquitectura (servidor/servidor) pueda convertirse en
una realidad. Cuando se ejecuta en todos los servidores, Oracle
Net permite que todas las solicitudes hechas desde una base de
datos (o aplicacion) sean pasadas a otra base de datos ubicada
en un servidor diferente. Se pueden ejecutar tanto consultas
distribuidas como actualizaciones distribuidas. Con esta
funcionalidad es posible comunicarse con todas las bases de
datos que sean accesibles desde toda la red. Se pueden entonces
crear sinnimos que proporcionen a las aplicaciones una
verdadera transparencia de red. Es decir que el usuario que
enva una consulta no conocer la ubicacin de los datos.

Lic. Octavio Aguilar M. 94


Puede configurar Oracle para dar soporte a un esquema de
duplicacin multi-maestro ( en el que todas las bases de datos
implicadas posean datos y puedan actuar como origen de
propagacin de datos) o un esquema de duplicacin de un nico
maestro (en el que los datos pertenezcan slo a una base de
datos). Cuando se disea un esquema de duplicacin, es
conveniente intentar restringir la propiedad de los datos tanto
como sea posible. El aumentar el nmero de fuentes de
propagacin, aumenta enormemente la probabilidad de que
aparezcan errores.
DUPLICACIN DINAMICA DE DATOS
Para mejorar el rendimiento de las consultas que usan datos
contenidos en bases de datos remotas, puede ser conveniente
duplicar dichos datos en el servidor local. Existen varias
posibilidades para llevar esto a cabo, que dependen de qu
funciones de Oracle se estn utilizando.
Se pueden utilizar disparadores de Bases de Datos para duplicar
datos de una tabla en otra. Por ejemplo, despus de hacer una
insercin (insert) en una tabla, un disparador puede activar la
insercin del mismo registro en otra tabla, pudiendo estar la
tabla en una base de datos remota. Por tanto, los disparadores
se pueden utilizar para forzar la duplicacin de datos en
configuraciones sencillas. Si los tipos de transacciones que se
aplican a la tabla base son demasiado diferentes unos de otros,
entonces el cdigo del disparador necesario para realizar la
duplicacin ser inaceptablemente complicado.
Cuando se usan las funciones de procesamiento distribuido de
Oracle, se pueden emplear vistas materializadas para duplicar
datos entre Bases de Datos. Con ellas, no es necesario duplicar
una tabla completa o limitarse a una nica tabla. Cuando se
duplica una nica tabla, se pueden usar la clusula where para
distinguir el conjunto de registros que se van a duplicar y se
pueden realizar operaciones de agrupacin (group by) sobre los
datos. Tambin se pueden combinar la tabla con otras tablas y
duplicar el resultado de la consulta.

Lic. Octavio Aguilar M. 95


Los datos de la vista meterializada local de la tabla o tablas
remotas tendrn que ser actualizados. Pueden especificar el
intervalo de refresco para la vista materializada y la base de
datos se ocupar automticamente de los procedimientos de
duplicacin.
Se pueden emplear otros mtodos para duplicar datos, aunque la
Base de Datos no se encarga de mantenerlos de forma dinmica.
Por ejemplo, puede utilizar la instruccin copy de SQL*Plus.
Sin embargo el comando copy tendra que repetirse cada vez que
se modificaran los datos. Por tanto, su uso debe limitarse a
aquellas situaciones en las que se dupliquen tablas de gran
tamao y que sean estticas.
DISEO DE BASE DE DATOS DISTRIBUIDAS
El diseo de base de datos distribuidas se ocupa de tomar
decisiones en la ubicacin de programas que accedern a la base
de datos y sobre los propios datos que la constituyen, a lo
largo de los diferentes nodos que constituyen la red. Tenemos
que distribuir pequeos elementos entre diferentes computadores,
es decir, distribuir la informacin.
ESTRATEGIAS DE DISEO DE BASES DE DATOS DISTRIBUIDAS.
Tenemos dos estrategias generales para realizar el diseo de
bases de datos distribuidas:
1. Estrategia descendente (top-down). Consiste en partir del
anlisis de requisitos para definir el diseo conceptual y las
vistas de usuario. A partir de estas se define un esquema
conceptual global y los esquemas externos necesarios.
Posteriormente se realiza la fragmentacin de la base de datos y
despus se asignan los fragmentos en los diferentes sitios de
nuestro sistema, creando las imgenes fsicas. Por ltimo se
realizan un diseo fsico para cada sitio.
2. Estrategia ascendente (botton-up). A partir de varios
esquemas conceptuales locales obtenemos uno global. Esta
estrategia suele ser utilizada para integrar varias bases de
datos centralizadas existentes.
En este texto se seguir la estrategia descendente. Esta
estrategia posee diferentes fases donde algunas son similares a

Lic. Octavio Aguilar M. 96


las fases del diseo de base de datos centralizadas. Se
describir brevemente cada etapa del proceso:
Anlisis de requisitos:
En esta etapa se determinan los requisitos para obtener tanto
los datos como las necesidades de procesamientos de los
usuarios. Igualmente se debern fijar los requisitos del
sistema, los objetivos que debe cumplir en cuanto a rendimiento,
seguridad, disponibilidad y flexibilidad teniendo en cuenta
aspectos econmicos. Al finalizar esta etapa debemos poseer unos
objetivos que servirn como entrada para dos actividades: Diseo
conceptual y diseo de vistas.
Diseo de vistas:
En esta etapa se definirn las interfaces del usuario con el
sistema. Se determinan las aplicaciones que usaran la base de
datos as como datos estadsticos o estimaciones de las mismas
sobre frecuencia de acceso de cada aplicacin a cada tabla, que
nos permitir poseer informacin que nos ayudar a optimizar
ciertas partes y crear un diseo conceptual mas eficiente. Al
finalizar esta etapa se debera poseer toda la informacin de
acceso y la definicin de los esquemas externos.
Diseo conceptual:
En esta etapa se suele realizar la integracin de las vistas del
usuario. Como resultado de la ejecucin de estas dos ltimas
etapas debemos tener un esquema conceptual global, informacin
de acceso y los esquemas externos que servirn de entrada para
la prxima etapa: Diseo de la distribucin.
Diseo de la distribucin.
Esta etapa es representativa en el diseo de Base de Datos
Distribuidas ya que es la etapa que la diferencia del diseo de
bases de datos centralizadas. Consiste obtener diferentes
esquemas conceptuales locales a partir del esquema conceptual
global y la informacin de acceso. En este punto debemos
considerar dos actividades importantes:
Fragmentacin: consiste en decidir como dividimos la base
de datos y en que partes.

Lic. Octavio Aguilar M. 97


Asignacin: consiste en ubicar los fragmentos que hemos
obtenido en los distintos nodos.
Diseo Fsico.
A partir de los esquemas conceptuales locales y la informacin
de acceso obtenidos en las etapas anteriores se debe obtener el
esquema fsico.
Monitorizacin y ajustes.
Este paso se realiza para llevar un control del proceso y e
intentar reparar lo errores o desviaciones que se produzcan en
el proceso.
FRAGMENTACION
La fragmentacin de datos nos permite obtener mejoras debido a:
Eficiencia. Los datos se almacenan donde van a ser
utilizados y as no existe redundancia.
Paralelismo: Las transacciones pueden dividirse en
subconsultas que operan con fragmentos.
Tipos de Fragmentacin:
Fragmentacin horizontal. Consiste en el particionamiento
en tuplas de una relacin global en subconjuntos, donde
cada subconjunto puede contener datos que cumplen una
condicin y se puede definir expresando cada fragmento como
una operacin de seleccin sobre la relacin global.

Base de datos sin Fragmentar:

Codemp Nombre Ap Am Dpto_sucur


111 Juan Paez Pealosa TARIJA
222 Jose Fernndez Arandia ORURO
333 Ral Nogales Pedraza TARIJA
444 Oscar Ramrez Pea ORURO
555 Alex Aguirre Mendez TARIJA

FRAGMENTAR

Base de Datos de Tarija: BD1

Codemp Nombre Ap Am Dpto_sucur


111 Juan Paez Pealosa TARIJA

Lic. Octavio Aguilar M. 98


333 Ral Nogales Pedraza TARIJA
555 Alex Aguirre Mendez TARIJA

Base de Datos de Oruro: BD2

Codemp Nombre Ap Am Dpto_sucur


222 Jose Fernndez Arandia ORURO
444 Oscar Ramrez Pea ORURO

Fragmentacin vertical. En este tipo de fragmentacin se


dividen el conjunto de atributos en grupos. Los fragmentos
se obtienen proyectando la relacin global sobre cada
grupo. La fragmentacin es correcta si cada atributo se
mapea en al menos un atributo del fragmento.

Base de datos sin Fragmentar:

Codemp Nombre Ap Am Dpto_sucur


111 Juan Paez Pealosa TARIJA
222 Jose Fernndez Arandia ORURO
333 Ral Nogales Pedraza TARIJA
444 Oscar Ramrez Pea ORURO
555 Alex Aguirre Mendez TARIJA

FRAGMENTAR

Base de Datos de Tarija: BD1

Codemp Nombre Ap Am
111 Juan Paez Pealosa
222 Jose Fernndez Arandia
333 Ral Nogales Pedraza
444 Oscar Ramrez Pea
555 Alex Aguirre Mendez

Base de Datos de Oruro: BD2

Codemp Dpto_sucur
111 TARIJA
222 ORURO
333 TARIJA
444 ORURO
555 TARIJA

Fragmentacin mixta. Este tipo de fragmentacin consiste en


la aplicacin de fragmentacin vertical y despus
fragmentacin horizontal o viceversa.

Lic. Octavio Aguilar M. 99


ASIGNACIN
Asignacin de fragmentos.
Supongamos que tenemos un conjunto de fragmentos F={F1, F2, ,
Fn} y una red que consiste en este conjunto de sitios S={S1, S2,
, Sm}. El problema de asignacin determina la distribucin
ptima de F en S. La optimalidad puede ser definida de acuerdo a
dos medidas:
1. Coste mnimo. Consiste en el coste de la comunicacin de
datos, coste del almacenamiento y el coste de procesamiento.
Nuestro objetivo es encontrar una funcin que minimiza el coste.
2. Rendimiento. La estrategia de asignacin se disea para
mantener una mtrica de rendimiento. Las dos mtricas ms
utilizadas son el tiempo de respuesta y el throughput
(productividad).
Cuando una serie de datos se asignan, estos pueden replicarse
para mantener una copia o varias idnticas.

CONSULTAS REMOTAS
Para consultar una base de datos remota, se debe crear un enlace
de datos en la base de datos en la que se origine la consulta.
El enlace de Base de Datos especifica el nombre del servicio que
se va a utilizar y puede especificar tambin el nombre del
usuario que se va a conectar a la Base de Datos remota. Cuando
se hace referencia a un enlace de Base de Datos en una
instruccin SQL, Oracle abre una sesin en la Base de Datos
remota y ejecuta all la instruccin SQL. Luego, los datos son
devueltos y la sesin remota permanece abierta durante toda la
sesin del usuario. Los enlaces de Bases de Datos pueden creare
como enlaces privados.

ENLACES DE BASES DE DATOS.-


Para facilitar las consultas de las aplicaciones a Sistemas de
Bases de Datos Distribuidas, Oracle usa database link. Un
database link define uno o mas caminos de comunicacin de bases
de datos de oracle a otras bases de datos.
Un enlace a bases de datos es esencialmente transparente a los
usuarios de sistemas de bases de datos distribuidas.
Se utiliza la instruccin CREATE DATABASE LINK para crear un
enlace de base de datos distribuidas, es decir, un objeto de
esquema que permite el acceso a los objetos de una base de datos

Lic. Octavio Aguilar M. 100


remota. La base de datos remota no tiene por que ser un sistema
Oracle.
Despus de crear un enlace de base de datos, se pueden utilizar
para hacer referencias a tablas y vistas de las bases de datos
remota. Se pueden hacer referencia a una tabla o vista remota en
una instruccin SQL aadiendo @enlace_bd al nombre de la tabla o
de la vista. Se puede consultar una tabla o vista remota con la
instruccin SELECT. Si se utiliza Oracle con la opcin
distribuida, tambin se puede acceder a tablas y vistas remotas
utilizando cualquier instruccin INSERT, UPDATE, DELETE, o LOCK
TABLE.
Para crear un enlace privado de base de datos, se requiere el
privilegio de sistema CREATE DATABASE LINK y para crear un
enlace publico de base de datos, el privilegio de sistema CREATE
PUBLIC DATABASE LINK. Adems se necesita el privilegio CREATE
SESSION en la base de datos remota de Oracle.
Es necesario que Oracle Net est instalado en ambas bases de
datos, en la local y en la remota.
Para acceder a sistemas que no sean Oracle, se ha de utilizar
Oracle Heterogeneous Services.
Sintaxis:
CREATE [SHARED][PUBLIC] DATABASE LINK enlace_BD
CONNECT TO nombre_usuario IDENTIFIED BY contrasea_usuario
USING 'nombre_servicio_bd';
[SHARED].-Se especifica para utilizar una sola conexin de red
para crear un enlace publico de la base de datos que varios
usuarios puedan compartir.
[PUBLIC].-Crea un enlace pblico de la base de datos disponible
para todos los usuarios. si se omite esta clusula, el enlace de
base de datos ser privado y slo se encontrar disponible para
el usuario que lo cre.
enlace_DB.-Especifica el nombre del enlace.
CONNECT TO.-Esta clusula permite activar una conexin a la base
de datos remota.

Lic. Octavio Aguilar M. 101


nombre_usuario IDENTIFIED BY contrasea_usuario.-Especifica el
nombre del usuario y la contrasea utilizados para conectarse a
la base de datos remota utilizando un enlace de base de datos
con usuario fijo.
USING 'nombre_servicio_bd'.-Especifica el nombre de servicio de
una base de datos remota.
Ejemplo1:Este es un simple ejemplo donde se crea un usuario
ADMINTARIJA, luego se le asigna privilegios de CONNECT, RESOURCE
al usuario, luego se crea un enlace de base de datos pblico
MILINK que se conecta al esquema de SCOTT de la base de datos
ORURO. Finalmente, se realiza un listado de todas las tablas que
tiene el esquema SCOTT, dando como resultado las tablas que
tiene SCOTT en la base de datos ORURO. Todas estas definiciones
y consultas se hicieron desde la base de datos TARIJA.

En esta pantalla se ve como el usuario ADMINTARIJA ingresa a la


base de datos TARIJA, luego este usuario intenta ver las tablas

Lic. Octavio Aguilar M. 102


que tiene en su esquema pero no tiene ninguna, entonces intenta
listar las tablas del esquema SCOTT, de la base de datos ORURO,
utilizando el "enlace de base de datos" llamado MILINK.

Ejemplo2: Para este ejemplo se crear dos bases de datos TARIJA


y ORURO, para los cuales se crearn usuarios y enlaces
respectivamente. Para la Base de datos TARIJA se crea la tabla
ALUMNO y para la base de datos ORURO se crea la tabla TELEFONO.
La base de datos estar fragmentado Verticalmente.

DEFINICIN DE LA BASE DE DATOS TARIJA:


Esta pantalla crea el usuario ADMINTARIJA, luego le asigna el
privilegio CONNECT y RESOURCE, finalmente crea el enlace de
bases de datos remotas ORURO_DB que se conectar al esquema del
usuario ADMINORURO de la base de datos ORURO.

Lic. Octavio Aguilar M. 103


En esta pantalla se realiza la conexin como usuario ADMINTARIJA
a la base de datos TARIJA, luego se define la tabla ALUMNO,
finalmente se listan las tablas que se tiene.

Lic. Octavio Aguilar M. 104


DEFINICIN DE LA BASE DE DATOS ORURO:
Esta pantalla, crea un usuario ADMINORURO con privilegios que le
permitan la definicin de objetos en la base de datos ORURO, y
al final se define el enlace de base de datos TARIJA_BD que esta
apuntando a la base de datos TARIJA, al esquema de ADMINTARIJA.

Lic. Octavio Aguilar M. 105


Esta pantalla se conecta a la base de datos ORURO el usuario
ADMINORURO, y este crea la tabla TELEFONO que almacena datos
telefnicos de los estudiantes, este usuario solo tiene una
tabla.

Lic. Octavio Aguilar M. 106


En esta pantalla se realiza la conexin a la base de datos
TARIJA, el primer SELECT lista tablas locales, el segundo SELECT
lista tablas remotas de la base de datos ORURO, usando el enlace
de base de datos ORURO_BD.

Lic. Octavio Aguilar M. 107


MANEJANDO VISTAS.
Una vista es la presentacin de datos a medida del usuario,
estos pueden ser extraidos a travez de un SELECT de uno o mas
tablas (u otras vistas). Una vista toma la salida de una
consulta en base a combinaciones de tablas.
En la pantalla se muestra un ejemplo dentro de la base de datos
TARIJA, donde se crea una vista llamada DATOSALUMNO, el mismo
que toma datos de la tabla local ALUMNO y la tabla remota
TELEFONO que existe en la base de datos ORURO, al final del
ejemplo se muestra el listado de la vista.

MANEJANDO SINNIMOS.
Un sinnimo es como un alias que se define para los objetos de
los esquemas. Un sinnimo puede proveer un nivel de seguridad,
enmascarando el nombre de objetos. A travs de sinnimos podemos
hacer que las conexiones sean transparentes a los usuarios. Los
usuarios que crean sinnimos necesitan el privilegio CREATE
SYNONYM, CREATE ANY SYNONYM y CREATE PUBLIC SYNONYM.

Lic. Octavio Aguilar M. 108


En el ejemplo de esta pantalla, se crea un sinnimo llamado
TELF_ORURO que representa a la tabla remota TELEFONO de la base
de datos ORURO, luego se prueba el sinnimo realizando un
listado, al final se muestra un ejemplo de como se puede
eliminar un sinnimo.

Lic. Octavio Aguilar M. 109


En esta pantalla se ve como el usuario ADMINTARIJA esta
conectado a la base de datos TARIJA, y puede insertar datos en
la tabla local ALUMNO, y tambin inserta datos en la tabla
remota TELEFONO que pertenece a la base de datos ORURO, para la
ltima operacin utiliza el enlace de base de datos ORURO_BD.

Lic. Octavio Aguilar M. 110


En esta pantalla el usuario ADMINORURO se conecta a la base de
datos ORURO e inserta datos en la tabla local TELEFONO y a la
tabla remota ALUMNO de la base de datos TARIJA, finalmente se
realiza el listado uniendo las tablas local TELEFONO y la tabla
remota ALUMNO.

Esta pantalla resume como dos bases de datos pueden interactuar


unas con otras, a esto se le suman las aplicaciones clientes
quienes son los que envan las operaciones que deben realizar
tanto en la base de datos local y la remota.

BASE DE DATO : TARIJA BASE DE DATO : ORURO

Tabla: Tabla:
ALUMNO TELEFONO
Enlace de BD: Enlace de BD:
ORURO BD TARIJA BD

Lic. Octavio Aguilar M. 111


Es esta pantalla el usuario ADMINTARIJA se conecta a la base de
datos TARIJA y crear un procedimiento almacenado llamado
ADDALUMNO, el mismo que inserta datos en la tabla local ALUMNO y
en la tabla remota TELEFONO de la base de datos ORURO.

Ahora lo que se har es ejecutar el procedimiento almacenado


definido en la anterior pantalla, el mismo que inserta datos en
la tabla local ALUMNO y tabla remota TELEFONO, finalmente se
muestra la lista de los datos insertados.

Lic. Octavio Aguilar M. 112


En este ejemplo un usuario se conecta a la base de datos de
ORURO, el mismo que ejecuta el procedimiento almacenado remoto
ADDALUMNO, se dice que el procedimiento almacenado es remoto por
que este existe en la base de dato TARIJA y no en ORURO.

Lic. Octavio Aguilar M. 113


En este ejemplo se realizan ejercicios de eliminacin (DELETE) y
modificacin (UPDATE) sobre objetos locales y remotos.

Lic. Octavio Aguilar M. 114

Vous aimerez peut-être aussi