Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Avanzado I
2
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
3
NDICE
Presentacin 5
Red de contenidos 6
Unidad de Aprendizaje 1
SEMANA 1 : Introduccin a una base de datos Oracle 7
Unidad de Aprendizaje 2
SEMANA 2 : Creacin de estructuras de datos en una base de datos 27
Oracle
Unidad de Aprendizaje 3
SEMANA 3 : Sentencias SQL de Manipulacin de Datos y funciones 43
predefinidas en una base de datos Oracle
Unidad de Aprendizaje 4
SEMANA 4 : Introduccin a Oracle PL/SQL 61
SEMANA 5 : Sentencias SQL en PL/SQL 75
SEMANA 6 : Creacin de Estructuras de Control en PL/SQL 87
SEMANA 7 : Semana de Exmenes Parciales de Teora
SEMANA 8 : Semana de Exmenes de Parciales Laboratorio
SEMANA 9 : Construccin de Cursores Explcitos en PL/SQL 95
SEMANA 10 : Manejo de Excepciones en PL/SQL 111
Unidad de Aprendizaje 5
SEMANA 11 : Construccin de procedimientos y funciones 123
almacenados en una base de datos Oracle
SEMANA 12 : Construccin de paquetes en una base de datos Oracle 137
SEMANA 13 : Disparadores en una base de datos Oracle 145
Unidad de Aprendizaje 6
SEMANA 14 : Introduccin a la administracin de una base de datos 165
Oracle
SEMANA 15 : Semana de Exmenes Finales de Laboratorio
SEMANA 16 : Semana de Exmenes Finales de Teora
SEMANA 17 : Semana de Sustentacin de Proyectos
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
5
PRESENTACIN
RED DE CONTENIDOS
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
7
UNIDAD DE
APRENDIZAJE
1
SEMANA
TEMARIO
ACTIVIDADES PROPUESTAS
1. MODELO RELACIONAL
El modelo relacional para la gestin de una base de datos es un modelo de datos
basado en la lgica de predicado y en la teora de conjuntos. Es el modelo ms
utilizado en la actualidad para modelar problemas reales y administrar datos
dinmicamente.
En este modelo, todos los datos son almacenados en relaciones y como cada
relacin es un conjunto de datos, el orden en el que estos se almacenen no tiene
mayor relevancia (a diferencia de otros modelos como el jerrquico y el de red).
Esto tiene la considerable ventaja de que es ms fcil de entender y de utilizar por
un usuario no experto. La informacin puede ser recuperada o almacenada por
medio de consultas que ofrecen una amplia flexibilidad y poder para administrar
la informacin.
Una tabla es una estructura lgica que sirve para almacenar los datos de un
mismo tipo (desde el punto de vista conceptual). Almacenar los datos de un
mismo tipo no significa que se almacenen slo datos numricos, o slo datos
alfanumricos. Desde el punto de vista conceptual, esto significa que cada
entidad se almacena en estructuras separadas.
Una tabla son conjuntos de datos del mismo tipo (desde el punto de vista fsico).
Ahora, cuando decimos del mismo tipo se desea indicar que los datos de una
columna son todos del mismo tipo: numricos, alfanumricos, fechas, etc.
A la vez, tambin, puede existir la relacin entre tablas que tienen un campo o
atributo comn. Por ejemplo, la tabla DETALLE que contiene todos los items
correspondiente a cada factura de la tabla FACTURA.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
9
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
11
3. LENGUAJE SQL
El lenguaje estructurado de consultas es un conjunto de sentencias u rdenes que
todos los programas y usuarios deben utilizar para acceder a bases de datos
Oracle. No hay otra manera de comunicarse con Oracle si no a travs de SQL.
Dado que SQL es un estndar, todas las bases de datos comerciales actuales
utilizan SQL como puente de comunicacin entre la base de datos y el usuario.
4. LENGUAJE PL/SQL
Ya se mencin anteriormente que SQL es un lenguaje de comandos, no un
lenguaje de programacin con todas las estructuras de control tpicas. As, SQL,
slo contempla instrucciones, ms o menos simples, pero no tiene ningn tipo de
instrucciones de control de flujo o de otro tipo ms propias de los lenguajes de
programacin de tercera generacin (3GL).
Existen dos formas para crear un nombre de servicio de red en Oracle: manual o
mediante el uso de un asistente. En este curso, slo nos centraremos en crear un
nuevo nombre de servicio de red local mediante el uso del asistente (asistente de
configuracin de red), para ver ms detalles respecto a la conexin y
configuracin de redes consulte el manual del administrador Networking.
Estos son los pasos que debe seguir para establecer una conexin a la base de
datos a travs del asistente:
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
13
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
15
CIBERTEC = (DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ca307-serv)(PORT = 1521)) )
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = cibertec) )
)
INST1_HTTP = (DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = server)(PORT = 1521)) )
(CONNECT_DATA =
(SERVER = SHARED)
(SERVICE_NAME = MODOSE)
(PRESENTATION = http://HRService) )
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) )
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO) )
)
Por ejemplo, si se desea agregar un nuevo servicio de red, para que se pueda
conectar a una base de datos llamada cibertecx (en el campo
SERVICE_NAME), que reside en el servidor server_cibertec ( en el campo
HOST ), se configurara de la siguiente manera:
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
17
6. SQL *PLUS
SQL *PLUS, es una herramienta indispensable para un administrador de base de
datos.
Es un entorno en modo texto y no contiene un motor PL/SQL local, es decir, las
instrucciones o comandos se envan directamente a la base de datos.
Existen dos entornos del SQL *PLUS, el entorno orientado al carcter y el entorno
Windows que incluyen operaciones GUI, especialmente, para establecer la
conexin a la base de datos y configurar las diferentes opciones del SQL *PLUS.
Una primera forma sera despus de ejecutar el SQL *PLUS desde el explorador
de Windows (/ORA90/BIN/SQLPLUS.EXE):
Conectado a:
Oracle9i Enterprise Edition Release 9.0.1.1.1 Production with the
partitioning option Jserver Release 9.0.1.1.1 Production
Una segunda forma sera iniciando el SQL *PLUS desde el men ejecutar del botn
de inicio:
Mediante el uso del cuadro de dilogo LOG ON, para iniciar el SQL*PLUS
para Windows. Aqu especifican un usuario, la contrasea y,
opcionalmente, la cadena de conexin.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
19
Existe un grupo de comandos que nos permiten configurar el SQL *PLUS mientras
estamos conectados a la base de datos. Algunos de los comandos se muestran
en la siguiente tabla:
Como ya se ha dado cuenta, las capacidades de edicin que ofrece SQL *PLUS
son escasas y poco intuitivas en comparacin con otros editores de texto. (Por
ejemplo, no se pueden utilizar las teclas de flecha, inicio y fin). Por tanto, SQL
*PLUS nos da la posibilidad de trabajar con el editor de su sistema operativo en
lugar de utilizar las capacidades de edicin de SQL *PLUS. Esto es posible
utilizando el comando EDIT dentro del SQL *PLUS.
Ejemplo:
SQL> EDIT
SQL> EDIT
SP2-0107: Nada que guardar.
Esto es normal si el buffer est vaco. Este buffer slo almacena uno y solamente
el ltimo comando emitido. No podemos ingresar ms de un comando desde el
editor de Windows.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
21
Tiene que cerrar el editor de Windows para volver a tener control de la ventana del
SQL *PLUS.
Grabe sus cambios para que estos se carguen al buffer del SQL *PLUS y pueda
ejecutar con el carcter /. Ejemplo:
SQL>/
SQL> EDIT
o tambin:
SQL> @unidad:\ruta\mi_archivo ;
La extensin del archivo por defecto es .sql. Podemos utilizar archivos con
extensin diferente al por defecto (cualquier archivo que pueda ser ledo con un
editor de texto) pero debemos especificar la extensin en el comando de
ejecucin. Por ejemplo, para ejecutar un archivo con extensin .txt: este sera el
comando:
SQL> @unidad:\ruta\mi_archivo.txt;
SQL> EDIT
Primero:
Creamos una carpeta de trabajo en la ruta y con el nombre que
crean conveniente hacerlo. Por ejemplo: c:\LP6\
Segundo:
Editemos las propiedades del acceso directo al archivo
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
23
Tercero:
Para que los cambios tengan efecto, tiene que volver a iniciar el
SQL*PLUS.
Este cambio realizado al acceso directo slo afecta a este archivo. El resto de
accesos directos al ejecutable del SQL *PLUS siempre tendrn como ruta por
defecto, la carpeta .../ORA90/BIN/.
Este comando es de gran utilidad para un operador del SQL *PLUS. Pues este
comando permite registrar, en un archivo especificado, los resultados de nuestras
consultas y operaciones realizadas en la base de datos. No solamente registra los
resultados sino que tambin registra los comandos utilizados. La sintaxis es la
siguiente:
SPOOL [nombre_archivo[.extension]]
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
25
Resumen
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
27
UNIDAD DE
APRENDIZAJE
2
SEMANA
TEMARIO
ACTIVIDADES PROPUESTAS
1. Manejo de Tablas
Para que un usuario de Base de Datos pueda crear una tabla debe tener los
siguientes privilegios:
Para crear una nueva tabla en el esquema del usuario, se debe contar con
el privilegio de sistema CREATE TABLE.
Para crear una nueva tabla en otro esquema de usuario, se debe contar con
el privilegio de sistema CREATE ANY TABLE.
Creando Tablas
-- Conctese con una cuenta que tenga los privilegios suficientes para crear
tablespaces y nuevos usuarios.
SQL>CONN system/cibertec@cibertec
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
29
-- Otorgue los privilegios necesarios para el usuario Desarrollo con el fin de que
efecte la conexin y pueda crear tablas en su esquema o en el esquema de otros
usuarios de la base de datos..
SQL>CONN desarrollo/desarrollo@cibertec
Para consultar la informacin de las tablas que hemos creado se puede acceder a
la vista del diccionario de datos USER_TABLES.
Alterando Tablas
El comando utilizado para alterar una tabla es ALTER TABLE. Para alterar una
tabla, sta debe estar contenida en el esquema del usuario o debe tener el
privilegio de sistema ALTER ANY TABLE.
Las siguientes son las principales razones para alterar o modificar una tabla:
Adicionando Columnas
Para adicionar una columna a una tabla, utilice el comando ALTER TABLE ..
ADD.
Por ejemplo, el siguiente comando adiciona una nueva columna llamada Bonus a
la tabla EMP:
Modificando Columnas
Para modificar la definicin de una columna existente, utilice el comando ALTER
TABLE .. MODIFY. Usted puede modificar un tipo de dato de la columna, un
valor por defecto, o un constraints. Tambin puede aumentar o disminuir la longitud
de la columna.
Renombrando Columnas
Para renombrar una columna existente, utilice el comando ALTER TABLE ..
RENAME COLUMN. El nuevo nombre no debe tener conflicto con el nombre de
una columna existente.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
31
Eliminando Columnas
Para eliminar una columna de una tabla, utilice el comando ALTER TABLE ..
DROP COLUMN..
Eliminando Tablas
El comando utilizado para eliminar una tabla es DROP TABLE. Para eliminar una
tabla de cualquier esquema se debe tener el privilegio de sistema DROP ANY
TABLE.
Por ejemplo, el siguiente comando elimina la tabla Emp del esquema de desarrollo:
Si la tabla a eliminar est referenciada por otra tabla a travs de una llave fornea,
usted no podr eliminarla con el comando anterior, usted tiene que adicionar la
clusula CASCADE CONSTRAINT al comando DROP TABLE para forzar la
eliminacin de la tabla.
Por ejemplo, el siguiente comando elimina la tabla EMP del esquema SCOTT junto
con la llave primaria y las forneas que hacen referencia (constraints).
Los constraints de integridad son reglas que restringen los valores de uno o ms
columnas en una tabla. La clusula CONSTRAINTS puede utilizarse en los
comandos CREATE TABLE o ALTER TABLE.
Los siguientes ejemplos crean una llave primaria a travs del comando CREATE
TABLE:
Los siguientes ejemplos crean una llave primaria a travs del comando ALTER
TABLE:
SQL> ALTER TABLE ORD ADD constraint pk_ord PRIMARY KEY (ordid);
SQL> ALTER TABLE ITEM ADD constraint pk_item PRIMARY KEY (ordid,
itemid);
Los siguientes ejemplos crean una llave fornea a travs del comando CREATE
TABLE:
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
33
Los siguientes ejemplos crean una llave fornea a travs del comando ALTER
TABLE:
Creando Check
Las restricciones CHECK es una regla de validacin a nivel de columna. Esta
restriccin se define durante la creacin de la tabla con el comando CREATE
TABLE o adicionarla despus de haber creado la tabla con el comando ALTER
TABLE.
Los siguientes ejemplos crean una restriccin CHECK a travs del comando
CREATE TABLE:
-- Ejemplo 1:.
SQL> CREATE TABLE Item (
Ordid NUMBER(4),
Itemid NUMBER(4) not null,
Prodid NUMBER(6),
Actualprice NUMBER(8,2) CONSTRAINTS ck_item_01
CHECK (actualprice >= 0),
Cantidad NUMBER(8) CONSTRAINTS ck_item_02
CHECK (cantidad >= 0),
Itemtot NUMBER(8,2) CONSTRAINTS ck_item_02
CHECK (itemtot >= 0),
CONSTRAINTS pk_item primary key (ordid, itemid),
CONSTRAINTS fk_item foreign key (ordid) references ord(ordid) )
Tablespace TS_DATA;
Los siguientes ejemplos crean una restriccin CHECK a travs del comando
ALTER TABLE:
-- Ejemplo 1:.
-- Ejemplo 2:.
Los siguientes ejemplos crean esta restriccin a travs del comando CREATE
TABLE:
-- Ejemplo 1:.
Los siguientes ejemplos crean esta restriccin a travs del comando ALTER
TABLE:
-- Ejemplo 1:.
-- Ejemplo 2:.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
35
-- Ejemplo 1:.
-- Ejemplo 2:.
-- Ejemplo 1:.
-- Ejemplo 2:.
Eliminando Constraints
Usted puede un constraint utilizando el comando ALTER TABLE con una de las
siguientes clusulas:
-- Ejemplo 1:.
-- Ejemplo 2:.
2. Manejando ndices
Tipos de ndices
Existen tres tipos de ndices cuya naturaleza depende de la forma en que haya sido
creado. Estos tipos son:
Un ndice no nico, que es aqul que no impone la restriccin de que las filas no
deban repetirse.
Un ndice compuesto es aqul que agrupa varias columnas de la tabla. Este tipo es
muy til cuando las sentencias de seleccin (SELECT) efectan bsquedas por
varios criterios (columnas) en una misma tabla. Es importante el orden en que se
ponen las columnas al crear el ndice; la columna ms referenciada debera ser
puesta en primer lugar y as sucesivamente.
Un ndice slo es efectivo cuando es utilizado. Es por eso que debe asegurarse
que la frecuencia de uso sea muy alta y que su implementacin redunde en
mejoras de rendimiento de las consultas efectuadas a la tabla donde reside el
ndice. Sin embargo, no debe explotarse el uso de los ndices dentro de una misma
tabla porque con cada operacin de insercin, actualizacin o eliminacin que se
lleva a cabo sobre una tabla, sus ndices se deben recrear, con el consiguiente uso
de recursos que se produce. A menudo, es conveniente eliminar o desactivar
temporalmente un ndice cuando sabemos que se va a efectuar una operacin de
carga/actualizacin/eliminacin masiva en la tabla y ms tarde volver a crearlo,
cuando la operacin haya finalizado.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
37
Escoja las columnas que se utilizan con mayor frecuencia en las clusulas
WHERE de las consultas.
No indexe aquellas columnas que tengan demasiados valores repetidos en
ellas.
Las columnas que toman valores nicos son excelentes candidatas para
indexar. Oracle, automticamente, indexa las claves primarias de las tablas.
Indexe las columnas que sirven para unir una tabla con otras (join en las
consultas).
Si hay columnas que no tienen valores nicos por s solas, pero que en
conjunto con otra columna forman una dupla nica o con pocas repeticiones
(menos que las columnas individualmente), entonces conviene indexarlas
(siempre y cuando existan consultas que las utilicen en conjunto). Estos
ndices reciben el nombre de ndices compuestos.
Otra consideracin importante a tomar en cuenta es que los ndices deben residir
en un tablespace diferente de donde residen las tablas.
-- Ejemplo 1:
Los ndices tambin pueden ser nicos o no nicos. Un ndice nico garantiza que
dos filas de una tabla no tengan valores duplicados en la columna o columnas que
conforman el ndice.
-- Ejemplo 2:.
-- Otorgando Privilegios.
Eliminando ndices
Para eliminar un ndice, debe estar contenido en su esquema o debe tener el
privilegio de sistema DROP ANY INDEX.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
39
3. Manejando Secuencias
Las secuencias son objetos de la base de datos en los que, mltiples usuarios,
pueden generar series de nmeros enteros diferentes.
Creando Secuencias
Para crear una secuencia en su esquema, debe tener el privilegio de sistema
CREATE SEQUENCE. Para crear una secuencia en otro esquema de usuario,
debe tener el privilegio CREATE ANY SEQUENCE.
Por ejemplo, la siguiente sentencia crea una secuencia para generar nmeros que
servirn para dar valores a la columna empno de la tabla Emp:
Por ejemplo, la siguiente sentencia crea una secuencia para generar nmeros que
servirn para dar valores a la columna empno de la tabla Emp:
Modificando Secuencias
Puede alterar una secuencia para cambiar cualquiera de los parmetros que
defini, excepto el nmero de secuencia inicial. Para cambiar este parmetro es
necesario eliminar la secuencia y volverla a crear.
Eliminando Secuencias
Usted puede eliminar cualquier secuencia de su esquema. Para eliminar una
secuencia de otro esquema, debe tener el privilegoi DROP ANY SEQUENCE.
Por ejemplo, la siguiente sentencia elimina una secuencia:
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
41
4. Manejando Sinnimos
Los sinnimos son objetos del sistema que apuntan a otros objetos. Implementan
alias de tablas, vistas, secuencias o unidades de programas. Por lo general se
utilizan para esconder ciertos detalles del objeto que representan al usuario final.
Los sinnimos pueden ser pblicos o privados. Los primeros son aqullos que caen
dentro del esquema PUBLIC y son vistos por todos los usuarios de la misma base
de datos. Los sinnimos privados se crean dentro del esquema de un usuario en
particular y slo estar visible para quienes l estime conveniente.
Creando Sinnimos
Para crear un sinnimo privado en su esquema, debe tener el privilegio CREATE
SYNONYM. Para crear un sinnimo pblico, debe tener el privilegio de Sistema
CREATE PUBLIC SYNONYM.
Eliminando Sinnimos
Para eliminar un sinnimo privado en cualquier esquema, debe tener el privilegio
DROP ANY SYNONYM. Para eliminar un sinnimo pblico, debe tener el privilegio
de Sistema DROP PUBLIC SYNONYM.
Resumen
En una base de datos Oracle pueden existir los siguientes tipos de objetos: tablas,
restricciones (constraints), ndices, secuencias, sinnimos.
Los tipos de restricciones (constraints) que existen son primary key, foreign key,
not null, unique y check.
http://www.java2s.com/Tutorial/Oracle/0120__Table/Catalog0120__Table.htm
Aqu hallar ejercicios y ejemplos sobre el uso de tablas.
http://www.java2s.com/Tutorial/Oracle/0100__Sequences/Catalog0100__Sequenc
es.htm Aqu hallar ejercicios y ejemplos sobre el uso de secuencias.
http://www.java2s.com/Tutorial/Oracle/0180__Index/Catalog0180__Index.htm
Aqu hallar ejercicios y ejemplos sobre el uso de secuencias.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
43
UNIDAD DE
APRENDIZAJE
3
SEMANA
TEMARIO
Introduccin al SQL
Manipulacin de datos y uso de las funciones predefinidas de una base de datos
Oracle
ACTIVIDADES PROPUESTAS
1. INTRODUCCIN A SQL
El lenguaje estructurado de consulta (SQL) define cmo manipular los datos en
Oracle. En este curso, no se pretende ensear a detalle cada instruccin SQL de
Oracle. Se sobre entiende que el alumno conoce este lenguaje. Lo que s es
importante conocer, son algunas de las funcionalidades o diferencias propias que
Oracle ha adicionado a las instrucciones SQL para facilitar las operaciones de
acceso y manipulacin de datos. El SQL de Oracle est basado sobre los
estndares de ANSI (American National Standards Institute y la ISO (International
Standards Organization).
Las instrucciones SQL pueden dividirse en cinco categoras que se muestran a
continuacin:
Las instrucciones de control del sistema cambian las opciones que afectan
a la base de datos completa, por ejemplo para activar o desactivar el
archivado definitivo.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
45
Una instruccin SELECT extrae datos de la base de datos. Permite consultar los
valores que contienen los campos de tablas y/o vistas de la base de datos. La
forma general de una instruccin SELECT es:
En SQL * PLUS, una instruccin SELECT, muestra en pantalla las filas que
satisfacen las condiciones de la consulta. Toda bsqueda de caracteres es case
sensitive, si los datos se guardaron en mayscula. El dato a buscar deber
escribirse en mayscula. Para efecto de la manipulacin del Diccionario de datos,
se debe tener en cuenta que Oracle guarda dicha informacin SIEMPRE en
maysculas. Por ejemplo, al crear una tabla:
No rows selected
Es importante conocer la estructura del objeto que se pretende acceder. Para ello,
se utiliza el comando DESC[RIBE] de SQL *PLUS. Este comando no es un
comando de SQL estndar. Es slo para el intrprete. Por ejemplo, para mostrar la
estructura de la tabla EMP hagamos lo siguiente:
SQL>DESC emp
O tambin:
SQL>DESCRIBE emp
Clusula WHERE
Para mostrar o seleccionar solo algunos registros, es decir, aplicar un filtro, se
usa la clusula WHERE seguido de una condicin:
Clusula ORDER BY
Para ordenar la salida de una sentencia SELECT se usa la clusula ORDER BY. A
continuacin se muestra un ejemplo:
En este caso al poner la palabra reservada DESC, significa que la salida del
SELECT ser retornado en orden DESCENDENTE de acuerdo a las columnas
mencionadas. Para el caso contrario (ordenacin ascendente), se utiliza la palabra
ASC.
Uso de Alias
Los alias son tiles cuando se requiere resolver algn tipo de ambigedad, por
ejemplo cuando haya columnas en dos tablas con el mismo nombre.
Por ejemplo, esta consulta utiliza alias para las dos tablas para diferenciar, la
columna DEPTNO, cuyo nombre se repite en ambas tablas:
Cuando necesitamos definir un alias cuyo nombre esta compuesto por ms de una
palabra, como el ejemplo anterior, este tipo de alias debe encerrarse entre
comillas ( ). Por ejemplo:
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
47
Subconsultas
Es una sentencia SELECT que esta dentro de una clusula de otra sentencia
SELECT. La clusula puede ser Where, Having o From.
Sintaxis:
SELECT select_list
FROM table
WHERE expr operator (SELECT select_list FROM table)
Donde operator puede ser >, =, >=, <, <>, <= o IN, ANY, ALL.
Tipos de Subconsultas
SQL> SELECT ename FROM emp WHERE sal> ( select sal from emp where
empno=7566)
SQL> SELECT ename, sal, deptno FROM emp WHERE sal IN (SELECT
MIN(sal) FROM emp group by deptno)
SQL> SELECT empno,ename,job FROM emp WHERE sal < ANY ( SELECT sal FROM
emp where job=CLERK ) AND job = CLERK ;
Rownum
Devuelve, en una consulta, el nmero de fila actual. Resulta til para limitar
nmero total de filas, y se usa principalmente en la clusula WHERE de las
consultas y en la clusula SET de las instrucciones UPDATE. ROWNUM devuelve
un valor de tipo NUMBER.
El ejemplo siguiente devuelve slo las primeras dos filas de la tabla EMP:
Convencional
INSERT INTO emp
(empno, ename, job, manager,hiredate, sal, comm)
VALUES
(2296,
JPEREZ,SALESMAN,7782,TO_DATE(25/09/2008,DD/MM/YYYY),
3000, 100);
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
49
Convencional
UPDATE emp SET (job, deptno) = (SELECT job, deptno FROM emp
WHERE empno = 7499) WHERE empno = 7698;
La orden DELETE elimina los registros que cumplen con la condicin definida en
el WHERE. La sintaxis es la siguiente:
Convencional
DELETE FROM dept WHERE dname = ACCOUNTING;
2.5 Operadores
Operadores de comparacin
SELECT ename, sal, comm FROM emp WHERE sal <= comm;
BETWEEN AND ..
SELECT ename, sal FROM emp WHERE sal BETWEEN 1000 AND 1500;
IN (List)
Este operador de comparacin sirve para verificar que un valor (campo) este en
una lista de valores, donde esta lista puede ser un conjunto de elementos
enumerados, como tambin puede ser un SELECT.
SELECT empno, ename, sal, mgr FROM emp WHERE mgr IN (7902,
7566, 7788);
LIKE
Se utilizar %_
Para mostrar los nombres de empleados que tengan como segunda letra de su
nombre la A
IS NULL
SELECT empno, ename, sal, job, comm FROM emp WHERE comm IS
NULL;
La columna null indica si el campo es obligatorio o no. Si est como NOT NULL, la
columna o tambin llamado campo, es obligatorio ya que no acepta la constante
NULL como contenido y NULL la representa la ausencia de valor o vaco.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
51
Operadores lgicos
AND
SELECT empno, ename, job, sal FROM emp WHERE sal >= 1100 AND
job = CLERK;
OR
SELECT empno, ename, job, sal FROM emp WHERE sal >= 1100 OR
job = CLERK;
SELECT empno, ename, job FROM emp WHERE job NOT IN ( CLERK,
MANAGER, ANALYST);
Tipos de Join
Equijoin
Non-equijoin.
Outer-join
Self-join.
Equijoin
SELECT emp.ename, emp.job, emp.sal, dept.dname FROM emp, dept
WHERE emp.deptno = dept.deptno;
Lo que hace un Equijoin es igualar los valores de los campos que son comunes
entre las diferentes tablas. Por ejemplo, en el caso anterior, para cada empleado
se est mostrando el campo dept.dname (nombre del departamento), el cual no
est en la tabla EMP. El dato comn que se tiene es que la tabla EMP tiene el
campo emp.deptno ( cdigo del departamento ). Con ese dato se va a buscar el
nombre del departamento que est en la tabla DEPT. Por eso, se hace el JOIN
emp.deptno=dept.deptno. Otra manera de expresar el select anterior sera:
Non-Equijoin
SELECT e.ename, e.job, e.sal, s.grade FROM emp e, salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal;
Outer-join
Self-join
Este tipo de JOIN se utiliza para consultar datos que se encuentran dentro de una
misma tabla (join consigo mismo). Se requiere consultar el nombre del manager
del empleado con cdigo empno igual a 7369 (MGR).
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
53
4. FUNCIONES PREDEFINIDAS
Aceptan uno o ms argumentos y retornan un valor por cada fila retornada por la
consulta. Las funciones estndar del Oracle9i permiten realizar diversas
operaciones tiles para los desarrolladores y administradores de base de datos.
stas se agregan al Server en el momento de la instalacin de una Base de datos
por defecto.
Funciones de carcter
Se dividen en dos grupos:
Funciones de conversin:
Funcin Resultado
LOWER(SQL Course) sql course
UPPER(SQL Course) SQL COURSE
INITCAP(SQL Course) Sql Course
Funcin Resultado
CONCAT(Good, String) GoodString
SUBSTR(Hola, 1, 3) Hol
LENGTH(Hola) 4
INSTR(Hola,o) 2
LPAD(120,10,*) *******120
RPAD(120,10,*) 120*******
Trim( esto es una prueba ) esto es una prueba
Funciones Numricas
ROUND(45.936 , 2) 45.94
TRUNC(45.936 , 2) 45.93
MOD(1600 , 300) 100
Funciones de fecha
Oracle guarda datos en un formato numrico interno: por centuria, ano, mes, da,
hora, minuto y segundo.
El formato por defecto depende de la instalacin del Oracle software.
SYSDATE es una funcin que retorna fecha y hora.
DUAL es una tabla pblica que se utiliza para ejecutar funciones
predefinidas.
Funciones de conversin
Funcin Resultado
VARCHAR2 or CHAR NUMBER
VARCHAR2 or CHAR DATE
NUMBER VARCHAR2
DATE VARCHAR2
TO_CHAR():
a) Funciones TO_CHAR con fecha: TO_CHAR(fecha, formato)
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
55
TO_NUMBER():
Convierte una cadena de caracteres que contiene dgitos a un nmero con formato
especificado por el modelo de formato.
TO_DATE():
Convierte una cadena de caracteres representando una fecha a un valor de fecha
con formato especificado. Si se omite, el formato es DD-MON-YY.
NVL():
Convierte un valor nulo a un valor que puede ser un nmero, un carcter o una
fecha.
NVL(comm, 0)
NVL(hiredate, sysdate)
NVL(job, no job)
DECODE():
DECODE(mivariable, valor1, retorno1, valor2, retorno2, .,
retorno_defecto)
RESULTADO
usted es Scott
Funciones de grupo
Estas funciones operan en grupos de registros para entregar un resultado por
grupo.
Tipo de Funciones
AVG, COUNT, MAX, MIN, STDDEV, SUM, VARIANCE
SQL> SELECT deptno, job, SUM(sal) FROM emp GROUP BY deptno, job;
Nota: Al trabajar con ROLLUP y CUBE, asegrese de que las columnas que
siguen a la clusula GROUP BY tengan entre s una relacin significativa y real; de
lo contrario, los operadores devolveran informacin irrelevante.
Los operadores CUBE y ROLLUP estn disponibles solamente en Oracle8i y en
versiones posteriores.
Operador ROLLUP
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
57
Ejemplo:
Operador CUBE
El operador CUBE se utiliza con una funcin agregada para generar filas
adicionales en un juego de resultados. Las columnas incluidas en la clusula
GROUP BY tienen referencias cruzadas para producir un superjuego de grupos.
La funcin agregada especificada en la lista de seleccin se aplica a dichos grupos
para producir valores de resumen para las filas superagregadas adicionales. El
nmero de grupos adicionales del juego de resultados est determinado por el
nmero de columnas incluidas en la clusula GROUP BY.
Ejemplo:
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
59
Resumen
http://www.java2s.com/Tutorial/Oracle/0040__Query-
Select/Catalog0040__Query-Select.htm
Aqu hallar ejercicios y ejemplos sobre la ejecucin de la sentencia SELECT.
http://www.java2s.com/Tutorial/Oracle/0080__Insert-Update-
Delete/Catalog0080__Insert-Update-Delete.htm
Aqu hallar ejercicios y ejemplos sobre la ejecucin de las sentencias
INSERT, UPDATE, DELETE.
http://www.java2s.com/Tutorial/Oracle/0300__Conversion-
Functions/Catalog0300__Conversion-Functions.htm
Aqu hallar ejercicios y ejemplos sobre las principales funciones de
conversin.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
61
UNIDAD DE
APRENDIZAJE
4
SEMANA
PROGRAMACIN PL/SQL
INTRODUCCIN A ORACLE PL/SQL
LOGRO DE LA UNIDAD DE APRENDIZAJE
TEMARIO
ACTIVIDADES PROPUESTAS
Cada lenguaje tiene sus ventajas y desventajas. Por ejemplos los lenguajes 4GL,
aslan al usuario de los algoritmos y estructuras de datos. Sin embargo, en algunos
casos, las estructuras procedimentales de los lenguajes 3GL resultan muy tiles
para expresar un determinado programa. Es en este caso que PL/SQL combina la
potencialidad de un lenguaje procedimental (PL) con la flexibilidad de un lenguaje de
4GL que es SQL.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
63
Portabilidad
DECLARE
Fecha DATE;
BEGIN
SELECT TO_DATE(19/06/2002, mmddyyyy )
INTO Fecha
FROM DUAL;
EXCEPTION
WHEN OTHERS THEN
Dbms_output.put_line(Error en la sentencia);
END;
2. CONCEPTOS BSICOS
2.1 Estructura de Bloques de PL/SQL
Un bloque de cdigo PL/SQL bsico puede estar formado a lo sumo por tres partes.
A continuacin, muestra el orden en que deben escribirse las secciones de los
bloques.
DECLARE
Variables, constantes, cursores, excepciones definidas por el
usuario.
BEGIN
Sentencias SQL.
Sentencias de control PL/SQL.
EXCEPTION
Acciones que se llevarn a cabo al producirse algn error.
END;
Toda unidad de PL/SQL comprende uno o ms bloques. Estos bloques pueden estar
completamente separados o anidados uno dentro de otro. As, un bloque puede
representar una pequea parte de otro bloque que, a su vez, puede ser parte de la
unidad de programa completa.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
65
2.2.2 Subprogramas
Los subprogramas son bloques PL/SQL con nombre. Puede declararlos como
funciones o como procedimientos. Los procedimientos ejecutan acciones sin
retornar valores y las funciones retornan valores.
Es posible, tambin, crear tipos de datos propios. Para ello, se usa la palabra
reservada TYPE, de la siguiente forma:
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
67
Manejo de Variables
Nota: La palabra clave END puede estar seguida por el nombre del subprograma para
lograr mayor claridad.
Donde:
Identificador: es el nombre del identificador
CONSTANT: restringe el identificador en forma tal que su valor no puede cambiar, las
constantes deben ser inicializadas.
Tipo de dato: un tipo de datos escalar o compuesto.
NOT NULL: restringe la variable en forma tal que debe contener siempre un valor; las
variables NOT NULL deben ser inicializadas.
Expresin: cualquier expresin PL/SQL tal como un literal, otra variable, o una
expresin que incorpore operadores y funciones.
v_pi NUMBER(7,3);
v_pi2 v_pi%TYPE;
v_ename emp.ename%TYPE;
Este tipo de declaracin tiene dos ventajas. La primera es que no se necesita conocer
el tipo de dato de la variable o de la columna. La segunda es que el tipo vara de
acuerdo con los cambios de la variable origen o de la columna de la tabla en tiempo de
ejecucin.
%ROWTYPE se usa para definir variables que contendrn registros de una tabla o de
un Cursor. Por ejemplo:
v_emp_reg emp%ROWTYPE;
CURSOR c_emp IS
SELECT empno, sal from EMP;
V_emp_reg1 c_emp%ROWTYPE;
Recomendaciones
Nombre los identificadores con las mismas reglas de nombres utilizadas para
los objetos SQL.
Puede usar convenciones para los nombres, por ejemplo v_nombre para
representar una variable y c_nombre para representar una constante.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
69
Ejemplos:
v_genero CHAR(1);
v_count BINARY_INTEGER := 0;
v_total_sal NUMBER(9,2) := 0;
v_fecha_orden DATE := SYSDATE + 7;
C_pi CONSTANT NUMBER(3,2) := 3.15;
v_valid BOOLEAN NOT NULL := TRUE;
4. BLOQUES ANIDADOS
Una de las ventajas que brinda PL/SQL sobre SQL, es la posibilidad de anidar
sentencias. Puede anidar bloques en cualquier lugar en el que se permita una
sentencia ejecutable, convirtiendo de esta forma el bloque anidado en una
sentencia. Sin embargo, puede particionar la seccin de cdigo de un bloque en
bloques ms pequeos. La seccin de excepciones, tambin, puede contener
bloques anidados.
5. OPERADORES Y FUNCIONES
Los operadores lgicos, aritmticos y de concatenacin usados en PL/SQL son los
mismos que se utilizan en SQL. Existe adems un operador exponencial (**).
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
71
Los operadores con prioridad ms alta son aplicados primero. En los siguientes
ejemplos, ambas expresiones producen 8:
5 + 12 / 4 = 8
12 / 4 + 5 = 8
Otros ejemplos:
V_count := v_count + 1;
V_igual := (v_n1 = v_n2);
Los operadores de comparacin son >, <, <=, >=, <>, =, =, y adicionalmente
existen los siguientes:
IF X IS NULL THEN Y
...
END IF;
X BETWEEN 1 AND 10
X NOT IN (1,2,3,4,5,6,7,8,9,10)
Las funciones de grupo se aplican a grupos de filas de una tabla y por eso no pueden
usarse en bloques PL/SQL, sino slo dentro de sentencias SQL.
Para convertir datos dentro de una expresin, debe asegurarse que los tipos son los
mismos. Oracle slo realiza conversiones automticas de VARCHAR2 a DATE y de
VARCHAR2 a NUMBER. Si se mezclan tipos de datos en una misma expresin,
deber usar las funciones de conversin de tipos de datos que correspondan para
realizar la conversin. Utilice las funciones de la lista que se muestra a continuacin.
Convenciones de Cdigo
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
73
Resumen
http://www.java2s.com/Tutorial/Oracle/0480__PL-SQL-
Programming/0020__Introduction.htm
Aqu encontrar ejercicios y ejemplos sobre bloques PL/SQL.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
75
UNIDAD DE
APRENDIZAJE
4
SEMANA
PROGRAMACIN PL/SQL
SENTENCIAS SQL EN PL/SQL
LOGRO DE LA UNIDAD DE APRENDIZAJE
TEMARIO
ACTIVIDADES PROPUESTAS
Los alumnos implementarn un bloque PL/SQL con acceso a datos haciendo uso de
sentencias DML.
Los alumnos implementarn un bloque PL/SQL con control de transacciones.
1. RDENES SQL.
Las rdenes SQL pueden clasificarse en 6 grupos:
Las nicas ordenes SQL permitidas en un programa PL/SQL, son las DML y las de
control de transacciones. Clsicamente, las rdenes DDL son ilegales, al igual que
el EXPLAIN PLAN.
2. DML EN PL/SQL
Las rdenes DML permitidas son SELECT, INSERT, UPDATE y DELETE.
SELECT retorna registros de la Base de Datos que cumplan con cierta condicin dada
en la clusula WHERE. INSERT agrega registros a una tabla de Base de Datos.
UPDATE modifica los registros de una tabla que cumplan con una condicin dada en
la clusula WHERE. DELETE elimina los registros de una tabla que cumplan con la
condicin que se da en el WHERE.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
77
2.1. Select
Donde :
Clusula where, condicin que deben cumplir los registros para ser mostrados.
DECLARE
v_ename varchar2(100);
BEGIN
SELECT ename into v_ename FROM emp WHERE
job=MANAGER;
dbms_output.put_line(empleado: ||v_ename);
END;
DECLARE
*
ERROR at line 1:
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at line 6
DECLARE
v_ename varchar2(100);
BEGIN
SELECT ename into v_ename FROM emp WHERE
empno=7369;
dbms_output.put_line(empleado: ||v_ename);
END;
Puede suceder el otro caso, en el que el SELECT no retorne filas. Este es un caso
que Oracle lo considera un error:
DECLARE
v_ename varchar2(100);
BEGIN
SELECT ename into v_ename FROM emp WHERE empno=9999;
dbms_output.put_line(empleado: ||v_ename);
END;
En este caso, no existe ningn empleado con codigo 9999. Entonces se mostrar
el siguiente error:
DECLARE
*
ERROR at line 1:
ORA-01403: no data found
ORA-06512: at line 6
2.2. Insert
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
79
DECLARE
v_deptno dept.deptno%TYPE;
v_dname dept.dname%TYPE;
v_loc dept.loc%TYPE;
BEGIN
v_deptno:=50;
v_dname:=TECNOLOGIA;
v_loc :=CALIFORNIA;
DECLARE
v_deptno dept.deptno%TYPE;
v_dname dept.dname%TYPE;
v_loc dept.loc%TYPE;
BEGIN
v_deptno:=50;
v_dname:=TECNOLOGIA;
v_loc :=CALIFORNIA;
2.3. Update
DECLARE
v_empno number(4):=7934;
BEGIN
UPDATE emp SET sal=2000 WHERE empno=v_empno;
dbms_output.put_line(empleado con codigo: ||v_empno|| ha sido
actualizado );
END;
DECLARE
v_empno number(4):=7934;
BEGIN
UPDATE emp SET sal=(SELECT MAX(sal) FROM emp
WHERE empno=v_empno;
dbms_output.put_line(empleado con codigo: ||v_empno|| ha sido
actualizado );
END;
2.4. Delete
La orden DELETE elimina los registros que cumplen con la condicin definida en
el WHERE. La sintaxis es la siguiente:
DECLARE
v_empno number(4):=7934;
BEGIN
DELETE FROM emp WHERE empno=v_empno;
dbms_output.put_line(empleado con codigo: ||v_empno|| ha sido
eliminado);
END;
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
81
DECLARE
v_empno number(4):=9999;
BEGIN
DELETE FROM emp WHERE empno=v_empno;
IF SQL%NOTFOUND THEN
dbms_output.put_line(empleado con codigo: ||v_empno|| no
existe );
ELSE
dbms_output.put_line(empleado con codigo: ||v_empno|| ha
sido eliminado );
END IF;
END;
Uso de Rowid
3. CONTROL DE TRANSACCIONES
Una transaccin es una serie de rdenes SQL que se completa o falla como una
unidad. Las transacciones sirven para evitar la inconsistencia de los datos.
Si por un motivo hay una falla de base de datos, hardware , red o cualquier otra causa
en (*), y hasta all SI se aplicaran los cambios hechos, la informacin quedara
inconsistente, pues se habra descontado de la cuenta_origen pero no cargado en la
cuenta_destino. Para resolver esta inconsistencia la solucin es que las dos
sentencias UPDATEs pertenezcan a una misma transaccin.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
83
SAVEPOINT nombre;
Donde nombre es el nombre del punto de salvaguarda. Los nombres de los puntos de
salvaguarda se basan en las reglas para los identificadores SQL. Los puntos de
salvaguarda no se declaran en la seccin declarativa, puesto que son globales para la
transaccin y la transaccin puede continuar ms all del final del bloque. Una vez
que se define el punto de salvaguarda, el programa puede deshacer la transaccin
hasta el punto de salvaguarda, con la siguiente sintaxis:
DECLARE
v_deptno number(2):=80;
BEGIN
INSERT INTO DEPT values (v_deptno,CONTABILIDAD,LIMA);
SAVEPOINT A;
INSERT INTO DEPT values (v_deptno+1,CAJA,TACNA);
SAVEPOINT B;
INSERT INTO DEPT values (v_deptno+2,GERENCIA,LIMA);
SAVEPOINT C;
INSERT INTO DEPT values (v_deptno+3,RRHH,PIURA);
ROLLBACK TO B;
-- no se inserta ni el depto de GERENCIA ni de RRHH, CAJA y
CONTABILIDAD si
COMMIT;
END;
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
85
Resumen
Una transaccin es una serie de rdenes SQL que se completa o falla como una
unidad. Las transacciones sirven para evitar la inconsistencia de los datos.
http://www.java2s.com/Tutorial/Oracle/0440__PL-SQL-
Statements/Catalog0440__PL-SQL-Statements.htm
Aqu hallar ejercicios y ejemplos sobre el uso de sentencias SQL en
programas PL/SQL.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
87
UNIDAD DE
APRENDIZAJE
4
SEMANA
PROGRAMACIN PL/SQL
CREACIN DE ESTRUCTURAS DE CONTROL EN
ORACLE PL/SQL
LOGRO DE LA UNIDAD DE APRENDIZAJE
TEMARIO
ACTIVIDADES PROPUESTAS
Los alumnos implementarn bloques PL/SQL con estructuras de control bsicas (IF
y LOOP).
Los alumnos resolvern casos prcticos para revisar las caractersticas de las
estructuras de control.
Las clusulas ELSIF y ELSE son opcionales y puede haber tantas clusulas ELSIF
como se desee.
Recomendaciones
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
89
x := 5;
y := NULL; ...
IF x != y THEN -- retorna NULL, no TRUE
sequencia_de_sentencias; -- no ejecutado
END IF;
a := NULL;
b := NULL;
...
IF a = b THEN -- retorna NULL, no TRUE
secuencia_de_sentencias; -- no ejecutado
END IF;
El uso del ELSIF ayuda a reducir cdigo, as como tambin un mejor entendimiento
(intuitivo) del mismo.
2. USO DE CASE
La sintaxis es la siguiente:
CASE
WHEN expresion1 THEN
secuencia_de_instrucciones;
WHEN expresion2 THEN
WHEN expresionN THEN
secuencia_de_instrucciones;
[ ELSE
secuencia_de_instrucciones; ]
END CASE;
Pero existe otro tipo de CASE donde, directamente, se pregunta por el valor de
una variable. A continuacin se muestra dicha sintaxis:
CASE [variable]
WHEN valor1 THEN
secuencia_de_instrucciones;
WHEN valor2 THEN
WHEN valorN THEN
secuencia_de_instrucciones;
[ ELSE
secuencia_de_instrucciones; ]
END CASE;
DECLARE
v_comision NUMBER :=20;
BEGIN
CASE v_comision
WHEN null THEN
DBMS_OUTPUT.PUT_LINE(Comision es nula);
WHEN 10 THEN
DBMS_OUTPUT.PUT_LINE(Comision es diez);
WHEN 20 THEN
DBMS_OUTPUT.PUT_LINE(Comision es veinte);
ELSE
DBMS_OUTPUT.PUT_LINE(Comision no cumple ninguna
condicion !!!);
END CASE;
END;
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
91
3. SENTENCIAS LOOP.
PL/SQL provee varias formas de estructurar ciclos para repetir una sentencia o un
conjunto de ellas varias veces. Muchos lenguajes proveen una clusula que
permite escoger el incremento del contador en cada iteracin (Por ejemplo STEP),
pero PL/SQL no la posee.
La Sentencia EXIT
LOOP
sentencia1;
sentencia2;
EXIT [WHEN condicion]
END LOOP;
Ejemplo:
.
v_ord_id s_item.ord_id%TYPE := 101;
v_counter NUMBER (2) := 1;
BEGIN
LOOP
Je,INSERT INTO s_item (ord_id, item_id)
VALUES (v_ord_id, v_counter);
v_counter := v_counter + 1;
EXIT WHEN v_counter > 10;
END LOOP;
El loop FOR tiene la misma estructura general que los loops vistos hasta aqu.
Tienen, adems, una sentencia de control delante de la palabra clave LOOP que
determina la cantidad de iteraciones que realizar PL/SQL. La sintaxis es como
sigue:
Ejemplo:
Puede utilizar el loop WHILE para repetir un conjunto de sentencias hasta que la
condicin de control no sea vlida (TRUE). La condicin ser evaluada al
comienzo de cada iteracin. El loop termina cuando la condicin es FALSE. Si la
condicin es FALSE al comienzo del loop, entonces no se ingresar a dicho ciclo
repetitivo nuevamente. La sintaxis es la siguiente:
Ejemplo:
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
93
Resumen
Se debe colocar los puntos ms importantes que el alumno debe recordar del tema
que se ha desarrollado durante la semana.
Ejemplos:
http://www.java2s.com/Tutorial/Oracle/0440__PL-SQL-
Statements/Catalog0440__PL-SQL-Statements.htm
Aqu hallar ejercicios y ejemplos sobre las estructuras de control y bucles en
programas PL/SQL.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
95
UNIDAD DE
APRENDIZAJE
4
SEMANA
PROGRAMACIN PL/SQL
CONSTRUCCIN DE CURSORES EXPLCITOS
LOGRO DE LA UNIDAD DE APRENDIZAJE
TEMARIO
ACTIVIDADES PROPUESTAS
1. DEFINICIN DE UN CURSOR
Para poder procesar una orden SQL, Oracle asignan un rea de memoria que
recibe el nombre de rea de contexto. Esta rea contiene informaciones necesarias
para completar el procesamiento, incluyendo el nmero de filas procesadas por la
orden, un puntero a la versin analizada de la orden y, en el caso de las consultas,
el conjunto activo, que es el conjunto de filas resultado de la consulta.
DECLARE
CURSOR sal_cursor IS
SELECT employee_id,salary
FROM employees;
BEGIN
END;
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
97
2. TIPOS DE CURSORES
Los cursores en PL/SQL se clasifican en 2: implcitos y explcitos. Los cursores
implcitos son declarados por el motor de base de datos para ejecutar sentencias
SQL de manipulacin de datos, incluyendo consultas que retornen una sola fila.
Para consultas que retornan ms de una fila se deben usar cursores explcitos y
ciclos FOR LOOP para recorrerlos.
Como el cursor se define a partir de una sentencia SELECT, sta puede ser de
cualquier complejidad, conteniendo joins, subconsultas, acceso a otra base de
datos con database links, entre otros.
DECLARE
CURSOR sal_cursor IS
SELECT employee_id,salary
FROM employees;
DECLARE
CURSOR emp_adm IS
select * from
employees where
department_id in
(select department_id from departments
where department_name='Administration')
DECLARE
CURSOR emp_adm IS
select employee_id, salary from
employees where
department_id in (select department_id from departments
where department_name='Administration');
v_emp employees.employee_id%TYPE;
v_sal employees.salary%TYPE;
BEGIN
OPEN emp_adm ;
FETCH emp_adm into v_emp, v_sal;
update employees set salary=v_sal*1.10 where
employee_id=v_emp;
FETCH emp_adm into v_emp, v_sal;
update employees set salary=v_sal*1.10 where
employee_id=v_emp;
END;
DECLARE
CURSOR emp_adm IS
select * from
employees where
department_id in (select department_id from departments
where department_name='Administration');
-- r_emp emp_adm%ROWTYPE;
r_emp employees%ROWTYPE;
BEGIN
OPEN emp_adm ;
FETCH emp_adm into r_emp;
update employees set salary=r_emp.salary*1.05 where
employee_id=r_emp.employee_id;
END;
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
99
OPEN nombre_del_cursor;
DECLARE
CURSOR emp_adm IS
select employee_id, salary from
employees where
department_id in (select department_id from departments
where department_name='Administration');
v_emp number(6);
v_sal number(8,2);
BEGIN
open emp_adm ;
fetch emp_adm into v_emp, v_sal;
update employees set salary=v_sal*1.10 where
employee_id=v_emp;
END;
DECLARE
CURSOR emp_adm IS
select * from
employees where
department_id in (select department_id from
departments
where department_name='Administration');
v_emp number(6);
v_sal number(8,2);
BEGIN
open emp_adm ;
fetch emp_adm into v_emp, v_sal;
update employees set salary=v_sal*1.10 where
employee_id=v_emp;
END;
Cuando se ha terminado de retornar todas las filas del conjunto activo, debe
cerrarse el cursor. Con esto se libera los recursos que fueron necesarios para
abrir el cursor. La sintaxis de cierre de un cursor es como sigue:
CLOSE nombre_del_cursor
Una vez que el cursor ha sido cerrado, no podr ejecutarse un FETCH sobre el
mismo. Le aparecera el siguiente error:
DECLARE
*
ERROR at line 1:
ORA-01001: invalid cursor
ORA-06512: at line 15
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
101
Adicionalmente, los cursores cuentan con ciertos atributos que permiten obtener
informacin acerca de la manipulacin de datos. Estos atributos son los
siguientes:
%FOUND
LOOP
FETCH c1 INTO mi_ename, mi_sal, mi_hiredate;
IF c1%FOUND THEN
...
ELSE
...
EXIT;
END IF;
END LOOP;
%ISOPEN
%NOTFOUND
LOOP
FETCH c1 INTO mi_ename, mi_sal, mi_hiredate;
EXIT WHEN c1%NOTFOUND;
...
END LOOP;
%ROWCOUNT
LOOP
FETCH c1 INTO mi_ename, mi_deptno;
IF c1%ROWCOUNT > 10 THEN
...
END IF;
...
END LOOP;
DECLARE
CURSOR emp_cursor
(v_employee_id varchar2) IS
SELECT first_name,last_name
FROM employees
WHERE employee_id=v_employee_id;
v_first_name employees.first_name%TYPE;
v_last_name employees.last_name%TYPE;
BEGIN
open emp_cursor(199);
fetch emp_cursor into v_first_name,v_last_name;
dbms_output.put_line ('Seleccion al Empleado: ' ||
v_first_name||' '||v_last_name );
END;
OPEN cursor_name;
LOOP
FETCH cursor_name INTO variable_name(s);
EXIT WHEN cursor_name%NOTFOUND;
END LOOP;
CLOSE cursor_name;
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
103
DECLARE
CURSOR c_dpto is
select department_id, department_name from
departments ;
v_department_id departments.department_id%TYPE;
v_department_name departments.department_name%TYPE;
BEGIN
OPEN c_dpto;
LOOP
FETCH c_dpto into v_department_id, v_department_name;
EXIT WHEN c_dpto%NOTFOUND;
dbms_output.put_line ('Departamento:' ||v_department_id||' - '||
v_department_name);
END LOOP;
CLOSE c_dpto;
Tabla 8.1 Entornos de desarrollo de PL/SQL
END;
DECLARE
CURSOR c_dpto is
select department_id, department_name from
departments ;
BEGIN
FOR v_department IN c_dpto LOOP
dbms_output.put_line ('Departamento:'
||v_department.department_id||' - '||
v_department.department_name);
END LOOP;
END;
DECLARE
CURSOR c_dpto is
select department_id, department_name from
departments ;
v_department_id departments.department_id%TYPE;
v_department_name departments.department_name%TYPE;
BEGIN
OPEN c_dpto;
FETCH c_dpto into v_department_id, v_department_name;
WHILE c_dpto%FOUND LOOP
dbms_output.put_line ('Departamento:' ||v_department_id||' - '||
v_department_name);
FETCH c_dpto into v_department_id, v_department_name;
END LOOP;
END;
FOR UPDATE es usado para bloquear registros de un cursor que van a ser
actualizados o eliminados.
DECLARE
CURSOR emp_cursor IS
SELECT empno, ename, sal
FROM emp
WHERE deptno = 30
FOR UPDATE NOWAIT;
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
105
DECLARE
CURSOR sal_cursor IS
SELECT sal
FROM emp
WHERE deptno = 30
FOR UPDATE NOWAIT;
BEGIN
FOR emp_record IN sal_cursor LOOP
UPDATE emp
SET sal = emp_record.sal * 1.10
WHERE CURRENT OF sal_cursor;
END LOOP;
COMMIT;
END;
3. EJERCICIOS PROPUESTOS
a. Imprima por pantalla los empleados que tienen el mismo trabajo que JONES
DECLARE
CURSOR e IS
SELECT ename
FROM emp
WHERE job = (SELECT job FROM emp WHERE ename = 'JONES');
BEGIN
FOR vr_reg IN e LOOP
Dbms_output.put_line(vr_reg.ename);
END LOOP;
END;
b. Liste los empleados que tienen un salario mayor que el de algn vendedor
(SALESMAN)
DECLARE
CURSOR e IS
SELECT ename FROM emp
WHERE sal > ALL (SELECT sal FROM emp WHERE job = 'SALESMAN');
BEGIN
FOR vr_reg IN e LOOP
Dbms_output.put_line(vr_reg.ename);
END LOOP;
END;
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
107
DECLARE
CURSOR e IS
SELECT deptno, ename, job, sal
FROM emp
WHERE sal in (SELECT MAX(sal) FROM emp GROUP BY deptno);
BEGIN
FOR vr_reg IN e LOOP
Dbms_output.put_line(vr_reg.ename);
Dbms_output.put_line(vr_reg.deptno);
Dbms_output.put_line(vr_reg.job);
Dbms_output.put_line(vr_reg.sal);
END LOOP;
END;
DECLARE
CURSOR c IS
SELECT dname, count (job)
FROM dept, emp
WHERE dept.deptno = emp.deptno AND job = 'CLERK'
GROUP BY dname
HAVING count(job) >= 2;
1. Realice un bloque PL/SQL que permita calcular el factorial de un nmero.
BEGIN
FOR vr_reg IN c LOOP
Dbms_output.put_line(vr_reg.dname);
Factorial de 5 es: 120
END LOOP;
END;
DECLARE
CURSOR c IS
SELECT AVG(sal) promedio, dname FROM dept, emp
WHERE dept.deptno = emp.deptno AND
job NOT IN ('PRESIDENT', 'MANAGER')
GROUP BY dname
ORDER BY 1 DESC;
BEGIN
FOR vr_reg IN c LOOP
Dbms_output.put_line(vr_reg.promedio);
Dbms_output.put_line(vr_reg.dname);
END LOOP;
END;
f. Listar todos los empleados con el mismo trabajo y salario que otro empleado X.
Tip: use un cursor con parmetros
DECLARE
CURSOR c (p_nombre VARCHAR2) IS
SELECT ename FROM emp
WHERE job = (SELECT job FROM emp WHERE ename = p_nombre) AND
sal = (SELECT sal FROM emp WHERE ename = p_nombre);
BEGIN
FOR vr_reg IN c (FORD) LOOP
Dbms_output.put_line(vr_reg.ename);
END LOOP;
END;
g. Listar los empleados que trabajan en una locacin X. Tip: use un cursor con
parmetros.
DECLARE
CURSOR c (p_loc VARCHAR2) IS
SELECT ename FROM emp, dept
WHERE emp.deptno = dept.deptno AND
loc = p_loc;
BEGIN
FOR vr_reg IN c (NEW YORK) LOOP
Dbms_output.put_line(vr_reg.ename);
END LOOP;
END;
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
109
Resumen
Los cursores explcitos pueden ser procesados por los bucles LOOP-EXIT, WHILE-
LOOP, FOR-LOOP.
http://www.java2s.com/Tutorial/Oracle/0500__Cursor/Catalog0500__Cursor.htm
Aqu hallar ejercicios y ejemplos sobre el uso de cursores.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
111
UNIDAD DE
APRENDIZAJE
4
SEMANA
10
PROGRAMACIN PL/SQL
MANEJO DE EXCEPCIONES EN PL/SQL
LOGRO DE LA UNIDAD DE APRENDIZAJE
TEMARIO
ACTIVIDADES PROPUESTAS
1. QU ES UNA EXCEPCIN?
Los errores en la ejecucin de cdigo PL/SQL, provenientes de fallos en el diseo,
errores de codificacin, fallos de hardware y otros, no son totalmente identificables,
de ah que sea necesario anticipar todos los posibles errores que se puedan
presentar.
DECLARE
---
BEGIN
---
EXCEPTION
---
END;
2. DECLARACIN DE EXCEPCIONES
Las excepciones se declaran en la seccin declarativa de un bloque, se generan en
la seccin ejecutable y se tratan en la seccin de excepciones. Existen dos clases
de excepciones: definidas por el usuario y predefinidas.
PL/SQL permite al usuario declarar sus propias excepciones con el fin de dar un
mejor manejo a la ejecucin de un bloque.
DECLARE
Error_excp EXCEPTION;
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
113
El siguiente ejemplo muestra cmo usar una excepcin definida por el usuario
dentro de un bloque:
DECLARE
Fuera_de_inventario EXCEPTION;
numero_existencias NUMBER(4);
BEGIN
...
IF numero_de_existencias < 1 THEN
RAISE fuera_de_inventario;
END IF;
EXCEPTION
WHEN fuera_de_inventario THEN
... manejar el error
END;
ACCESS_INTO_NULL
Su programa trata de asignar valores a los atributos de un objeto no inicializado.
COLLECTION_IS_NULL
Su programa trata de aplicar mtodos de coleccin a una coleccin no
inicializada
CURSOR_ALREADY_OPEN
Su programa trata de abrir un cursor que ya est abierto.
DUP_VAL_ON_INDEX
Su programa trata de almacenar valores duplicados en una columna de base de
datos que debe ser nica.
INVALID_CURSOR
Su programa trata de hacer una operacin invlida sobre un cursor.
INVALID_NUMBER
Una conversin de carcter a nmero ha fallado en una sentencia.
LOGIN_DENIED
Su programa trat de conectarse a Oracle con un nombre de usuario o clave
invlidos.
NO_DATA_FOUND
Una sentencia SELECT INTO no retorn filas o su programa referencia un
elemento no existente en una coleccin.
NOT_LOGGED_ON
Su programa enva una llamado de BD sin estar conectado a la misma.
PROGRAM_ERROR
PL/SQL tiene un problema interno.
STORAGE_ERROR
PL/SQL se est ejecutando fuera de memoria o la memoria est corrupta.
SUBSCRIPT_BEYOND_COUNT
Su programa referencia un elemento de una coleccin usando un ndice mayor
que el nmero de elementos de la misma.
SUBSCRIPT_OUTSIDE_LIMIT
Su programa referencia una coleccin usando un ndice fuera del rango legal
(INTEGER).
TIMEOUT_ON_RESOURCE
Ocurri un time-out mientras se esperaba por un recurso.
TOO_MANY_ROWS
Una sentencia SELECT INTO retorna ms de una fila.
VALUE_ERROR
Un error de conversin aritmtica ocurri. En procedimientos se retorna esta
misma excepcin, pero en sentencias SQL se retorna INVALID_NUMBER.
ZERO_DIVIDE
Su programa trat de efectuar una divisin por cero.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
115
3. GENERACIN DE EXCEPCIONES
DECLARE
no_multiplo_10 EXCEPTION;
numero number(2);
BEGIN
numero:=12;
if MOD(numero,10)!=0 then
RAISE no_multiplo_10;
end if;
dbms_output.put_line (' el nmero es mltiplo de 10');
EXCEPTION
WHEN no_multiplo_10 THEN
dbms_output.put_line (' el nmero NO es mltiplo de
10');
END;
4. TRATAMIENTO DE EXCEPCIONES
Cuando se genera una excepcin, el control pasa a la seccin de excepciones del
bloque. Esta seccin est compuesta por gestores para las diferentes excepciones.
Un gestor de excepciones contiene el cdigo que se ejecutar cuando ocurra el
error asociado con la excepcin y sta sea generada.
DECLARE
A EXCEPTION; --Declaracin de la excepcin A
BEGIN
.
RAISE A; -- Generacin de la excepcin A
---------- Cualquier cdigo aqu no se ejecuta
EXCEPTION
WHEN A THEN -- el control pasa al gestor de excepciones
--------- Este cdigo sera ejecutado
END;
Cada gestor de excepciones est formado por la clusula WHEN y las rdenes que
se ejecutarn cuando la excepcin sea generada. La clusula WHEN identifica la
excepcin correspondiente a cada gestor.
DECLARE
A EXCEPTION; --Declaracin de la excepcin A
B EXCEPTION; --Declaracin de la excepcin B
BEGIN
.
RAISE A; -- Generacin de la excepcin A
RAISE B -- Generacin de la excepcin B
EXCEPTION
WHEN A THEN -- el control pasa al gestor de excepciones
--------- Este cdigo sera ejecutado
A menudo, es til saber dentro de un gestor OTHERS, qu error Oracle dio lugar a
la excepcin. Una razn podra ser el registrar el error que tuvo lugar, ms que el
hecho de que tuvo lugar un error. O bien, puede desearse tomar acciones
diferentes, dependiendo del error que suceda. PL/SQL proporciona dos funciones
predefinidas, SQLCODE y SQLERRM.
Por ejemplo:
DECLARE
err_num NUMBER;
err_msg VARCHAR2(100);
BEGIN
...
EXCEPTION
...
WHEN OTHERS THEN
err_num := SQLCODE;
err_msg := SUBSTR(SQLERRM, 1, 100);
INSERT INTO errors VALUES (err_num, err_msg);
END;
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
117
DECLARE
deadlock_detected EXCEPTION;
PRAGMA EXCEPTION_INIT(deadlock_detected, -60);
BEGIN
...
EXCEPTION
WHEN deadlock_detected THEN
-- handle the error
...
END;
En este caso, debemos saber que el error ORA-00060 se produce cuando ocurre
un deadlock (bloque mutuo).
Utilizacin de RAISE_APPLICATION_ERROR
DECLARE
numero NUMBER(2);
BEGIN
numero:=12;
numero:=12/0;
END;
DECLARE
*
ERROR at line 1:
ORA-01476: divisor is equal to zero
ORA-06512: at line 5
DECLARE
numero NUMBER(2);
BEGIN
numero:=12;
numero:=12/0;
EXCEPTION
when ZERO_DIVIDE then
RAISE_APPLICATION_ERROR(-20000,'usted hizo una divisin por
cero');
END;
DECLARE
*
ERROR at line 1:
ORA-20000: usted hizo una divisin por cero
ORA-06512: at line 8
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
119
5. PROPAGACIN DE EXCEPCIONES
DECLARE La excepcin A es
A EXCEPTION; generada en el sub-
BEGIN bloque
BEGIN
RAISE A;
La excepcin es
EXCEPTION
tambin tratada en el
WHEN A THEN
sub-bloque
END;
Se devuelve el control
aqu
END;
DECLARE La excepcin B es
A EXCEPTION; generada en el sub-
B EXCEPTION; bloque
BEGIN
BEGIN
Aunque existe un
.
gestor WHEN
OTHERS, ste no se
ejecuta
EXCEPTION
WHEN OTHERS THEN
... El bloque se completa
sin xito, con la
END; execpcin
VALUE_ERROR
Se genera la
excepcin A
DECLARE La excepcin es
tratada, y se genera B
A EXCEPTION; en el gestor de A.
B EXCEPTION;
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
121
6. EJERCICIOS PROPUESTOS
Resumen
La clusula WHEN OTHERS permite capturar cualquier excepcin para que la que
no se haya definido una rutina de tratamiento de excepciones.
http://www.java2s.com/Tutorial/Oracle/0480__PL-SQL-Programming/Catalog0480__PL-
SQL-Programming.htm
Aqu hallar ejercicios y ejemplos sobre manejo de excepciones.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
123
UNIDAD DE
APRENDIZAJE
5
SEMANA
11
TEMARIO
ACTIVIDADES PROPUESTAS
BEGIN
imprime ('esto es mi primer procedimiento');
END;
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
125
Eliminacin de un procedimiento
DECLARE
men_mayuscula varchar2(100);
BEGIN
men_mayuscula:=formatea_mayuscula('mi primera
funcin');
dbms_output.put_line (men_mayuscula);
END;
La orden RETURN
RETURN expresin;
Al ejecutarse:
DECLARE
men_mayuscula varchar2(100);
BEGIN
men_mayuscula:=formatea_mayuscula('mi primera
funcin');
dbms_output.put_line (men_mayuscula);
END;
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
127
Se muestra el error:
DECLARE
*
ERROR at line 1:
ORA-06503: PL/SQL: Function returned without value
ORA-06512: at "HR.FORMATEA_MAYUSCULA", line 4
ORA-06512: at line 4
Para una correcta utilizacin de las funciones deben tenerse en cuenta estas
sencillas reglas:
Para eliminar una funcin tambin se usa la clusula DROP como se muestra a
continuacin:
Sin embargo, debe evitarse el uso de parmetros OUT e IN OUT con funciones, dado
que su propsito no es retornar mltiples valores. La siguiente tabla muestra el uso de
los modos de paso de parmetros.
IN OUT IN OUT
Pasa un valor al Retorna un valor a quien Pasa un valor al
subprograma invoca el subprograma subprograma y retorna el
valor actualizado
Puede ser una constante Debe ser una variable Debe ser una variable
o variable
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
129
2. SUBPROGRAMAS LOCALES.
El siguiente es un ejemplo de un subprograma local declarado en la seccin
declarativa de un bloque PL/SQL:
DECLARE
CURSOR c_Emps IS
SELECT ename, job
FROM emp;
v_salida_formateada VARCHAR2(50);
/* Funcin que devolver el nombre y job
concatenados y separados por espacio */
FUNCTION Formateador ( p_ename IN VARCHAR2,
p_job IN VARCHAR2)
RETURN p_ename||' '||p_job;
END Formateador;
Nota: Los programas locales deben ser declarados al final de la seccin declarativa. Si
situamos Formateador antes de c_Emps, obtendramos un error de compilacin.
9 filas seleccionadas.
CAMPOS DESCRIPCIN
OWNER Propietario del procedimiento o funcin.
NAME Nombre del procedimiento o funcin.
TYPE Los diferentes tipos de subprogramas.
Realmente, aparte de funciones y
procedimientos, se puede observar el cdigo
de los diferentes tipos: PACKAGE, PACKAGE
BODY,
PROCEDURE, TRIGGER, TYPE, TYPE
BODY
LINE Nmero de la lnea del cdigo
TEXT Contenido de cdigo que est en la presente
lnea.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
131
4. EJERCICIOS PROPUESTOS
a. Cree una funcin para convertir una cadena a nmero teniendo en cuenta que
la entrada puede ser cualquier cadena.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
133
PROCEDURE nomina IS
CURSOR c_emp IS SELECT empno, ename, job, sal, nvl(comm, 0) comm
FROM EMP;
V_bono number := 0;
BEGIN
FOR v_emp IN c_emp LOOP
BEGIN
SELECT comm. INTO v_bono FROM BONUS
WHERE ename = v_emp.ename;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_bono := 0;
END;
Dbms_output.put_line(v_emp.empno || CHR(9) || v_emp.ename || CHR(9) ||
v_emp.job || CHR(9) || to_char(v_emp.sal + v_emp.comm + v_bono,
$99,999.99));
END LOOP;
END;
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
135
Resumen
En Oracle, una funcin puede tener parmetros de salida. De ser as, no podr ser
invocada desde un SELECT.
Los tipos de parmetros son IN (Entrada), OUT (Salida), IN/OUT (Entrada y salida)
http://www.java2s.com/Tutorial/Oracle/0540__Function-Procedure-
Packages/Catalog0540__Function-Procedure-Packages.htm
Aqu hallar ejercicios y ejemplos de funciones y procedimientos almacenados.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
137
UNIDAD DE
APRENDIZAJE
5
SEMANA
12
TEMARIO
Creacin de paquetes
ACTIVIDADES PROPUESTAS
1. DEFINICIN DE UN PAQUETE
En el mundo de Oracle, Paquete se conoce como PACKAGE. Es una estructura
PL/SQL que permite almacenar, juntos, una serie de objetos relacionados. Un
paquete tiene dos partes diferenciadas, la especificacin y el cuerpo del paquete.
Cada una de ellas se almacena por separado en el diccionario de datos. A
diferencia de los procedimientos y funciones, que pueden estar contenidos
localmente en un bloque o ser almacenados en la base de datos, un paquete no
puede ser local; slo puede almacenarse. Tambin presentan una serie de
ventajas en lo que se refiere al rendimiento.
2. ESPECIFICACIN DE UN PAQUETE
La especificacin (o cabecera) del paquete contiene informacin acerca del
contenido del paquete. Sin embargo, no contiene el cdigo de los procedimientos.
Sintaxis:
Donde:
Las reglas sintcticas para una cabecera de paquete son las mismas que para una
seccin declarativa, excepto en lo que se refiere a la declaracin de procedimientos
y funciones. Estas reglas son las siguientes:
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
139
Por ejemplo:
Por ejemplo:
Por ejemplo:
DECLARE
r_cliente cliente%ROWTYPE;
BEGIN
r_cliente.DNI :=2245432;
r_cliente.Nombre := Pepito;
r_CLIENTE.Apellidos:=Grillo;
r_cliente.fecha :=sysdate;
r_cliente.Tipotrabajo :Completo;
r_cliente.sueldo :=222222;
paquetecliente.Insertarcliente (r_cliente);
END;
BEGIN
ClassPackage.RemoveStudent(1006,HIS,101);
END;
Esta caracterstica es muy til, dado que permite aplicar la misma operacin a
objetos de tipos diferentes. Resumiendo, pueden diferir en el nmero, orden o
familia de tipo de datos de los parmetros.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
141
La sobrecarga puede ser una tcnica muy til cuando se pueda hacer la misma
operacin con argumentos de tipos diferentes. Sin embargo, la sobrecarga est
sujeta a diversas restricciones:
6. PAQUETES DE ORACLE
El motor de base de datos Oracle contiene un conjunto variado de paquetes
preestablecidos que pueden ser usados para ejecutar algunas tareas. A
continuacin veremos algunos de estos paquetes y su funcionalidad:
Paquete Descripcin
DBMS_OUTPUT Permite desplegar la salida de bloques PL/SQL en la
consola de SQLPlus. Se usa comnmente con propsitos
de pruebas y verificacin de errores.
Ej.:
BEGIN
pago := 0;
c1rec.comm;
END LOOP;
END calc_nomina;
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
143
DESC DBMS_APPLICATION_INFO
5. PAQUETES DE ORACLE
a. Construya un paquete para manipulacin de empleados (completar con las
dems funciones).
Resumen
Un paquete es una estructura PL/SQL que permite almacenar juntos una serie de
objetos relacionados.
Todos los elementos definidos en la cabecera del paquete son pblicos, es decir,
pueden ser referenciados por otros objetos de base de datos. Los que estn
definidos slo dentro del cuerpo del paquete pueden ser utilizados dentro del
mismo cuerpo
http://www.java2s.com/Tutorial/Oracle/0540__Function-Procedure-
Packages/Catalog0540__Function-Procedure-Packages.htm
Aqu hallar ejercicios y ejemplos de paquetes almacenados.
.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
145
UNIDAD DE
APRENDIZAJE
5
SEMANA
13
TEMARIO
Creacin de disparadores
Componentes de un disparador
Disparadores de base de datos
ACTIVIDADES PROPUESTAS
1. CREACIN DE DISPARADORES
La sintaxis es la siguiente:
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
147
2. COMPONENTES DE UN DISPARADOR
1
Tablas mutantes se revisar en el punto 2.8 de esta sesin.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
149
La clusula WHEN slo es vlida para disparadores con nivel de fila. Si est
presente, el cuerpo del disparador slo se ejecutar para las filas que
cumplan la condicin especificada en la clusula. Esta clusula se define de
la forma:
WHEN condicin
Donde condicin es una expresin booleana que ser evaluada para cada
fila. Se puede hacer referencia a las variables :new y :old dentro de la
condicin, pero no se utilizan los dos puntos ( : )
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
151
Predicado Comportamiento
INSERTING TRUE si la orden de disparo es
INSERT; FALSE en caso contrario
UPDATING TRUE si la orden de disparo es
UPDATING; FALSE en caso contrario
DELETING TRUE si la orden de disparo es
DELETE; FALSE en caso contrario
Una tabla mutante es una tabla que est modificndose actualmente por una
orden DML. Para un disparador, sta es la tabla sobre la que est definido.
3. DISPARADORES DE SISTEMA
Lo clsico en todo Manejador de Base de Datos, son los disparadores
anteriormente desarrollado, es decir, aqullos que se disparan ante una operacin
DML.
En las ltimas versiones, han aparecido otros tipos de disparadores. stos son los
disparadores de Sistema, los cuales se clasifican en dos: Disparadores ante una
operacin DDL y Disparadores ante un evento de Base de Datos.
General
trigger$
Vistas relacionadas a
user_triggers
los disparadores DDL
all_triggers
dba_triggers
create trigger
create any trigger
Privilegios de sistema
administer database trigger -- required for ON DATABASE
necesarios
alter any trigger
drop any trigger
BEFORE / AFTER ALTER
BEFORE / AFTER CREATE
BEFORE / AFTER DROP
BEFORE / AFTER RENAME
BEFORE / AFTER ANALYZE
BEFORE / AFTER ASSOCIATE STATISTICS
Disparadores DDL y BEFORE / AFTER DISASSOCIATE STATISTICS
las operaciones que lo BEFORE / AFTER AUDIT
disparan BEFORE / AFTER NOAUDIT
BEFORE / AFTER COMMENT
BEFORE / AFTER DDL
BEFORE / AFTER GRANT
BEFORE / AFTER REVOKE
BEFORE / AFTER TRUNCATE
AFTER SUSPEND
Un ejemplo
CREATE USER nwoug
Usuario Demo
IDENTIFIED BY nwoug
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
153
CONN nwoug/nwoug
CREATE TABLE ddl_log (
operation VARCHAR2(30),
obj_owner VARCHAR2(30),
Tabla donde se
object_name VARCHAR2(30),
capturar la operacin
sql_text VARCHAR2(60),
DDL
attempt_by VARCHAR2(30),
attempt_dt DATE)
TABLESPACE <tablespace_name>;
Disparadores DDL
CREATE OR REPLACE TRIGGER <trigger_name>
<BEFORE | AFTER> <triggering_action>
ON <SCHEMA | DATABASE>
DECLARE
Disparador que captura
Actividad de creacin -- variable declarations
en un esquema
BEGIN
-- trigger code
EXCEPTION
-- exception handler
END <trigger_name>;
/
conn system/manager
conn nwoug/nwoug
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
155
DECLARE
Disparador que captura
un evento de creacin -- variable declarations
en una Base de Datos
BEGIN
-- trigger code
EXCEPTION
-- exception handler
END <trigger_name>;
/
CONN system/manager
CONN nwoug/nwoug
DECLARE
oper ddl_log.operation%TYPE;
BEGIN
INSERT INTO ddl_log
SELECT ora_sysevent, ora_dict_obj_owner,
ora_dict_obj_name, NULL, USER, SYSDATE
FROM dual;
END bcd_trigger;
/
conn system/manager
conn nwoug/nwoug
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
157
DECLARE
-- variable declarations
BEGIN
-- trigger code
EXCEPTION
-- exception handlers
END <trigger_name>;
/
CREATE OR REPLACE TRIGGER ddl_trigger
BEFORE CREATE OR ALTER OR DROP
ON SCHEMA
DECLARE
oper ddl_log.operation%TYPE;
BEGIN
SELECT ora_sysevent
INTO oper
FROM dual;
DECLARE
oper ddl_log.operation%TYPE;
BEGIN
SELECT ora_sysevent
INTO oper
FROM dual;
log_proc(ora_sysevent,
ora_dict_obj_owner,
ora_dict_obj_name);
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
159
PRAGMA AUTONOMOUS_TRANSACTION;
Procedimiento de Log
BEGIN
INSERT INTO ddl_log
SELECT ora_sysevent, ora_dict_obj_owner,
ora_dict_obj_name, 'Not Allowed', USER, SYSDATE
FROM dual;
COMMIT;
END log_proc;
/
DECLARE
x user_tables.table_name%TYPE;
BEGIN
SELECT ora_dict_obj_name
INTO x
Disparador que
FROM dual;
previene la creacin de
obejtos cuyos nombres
IF SUBSTR(x, 1, 1) = 'X' THEN
empiezan con X
RAISE_APPLICATION_ERROR(-20099, 'Table Names Can Not Start
With The Letter X');
END IF;
END no_xtabs;
/
CONN / AS SYSDBA
user_name VARCHAR2(30),
ddl_date DATE,
ddl_type VARCHAR2(30),
object_type VARCHAR2(18),
owner VARCHAR2(30),
object_name VARCHAR2(128))
TABLESPACE logging;
BEGIN
INSERT INTO loguser.ddl_log
(user_name, ddl_date, ddl_type,
object_type, owner,
object_name)
VALUES
(ora_login_user, SYSDATE, ora_sysevent,
ora_dict_obj_type, ora_dict_obj_owner,
ora_dict_obj_name);
END ddl_trig;
/
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
161
General
trigger$
Vistas del Diccionario
user_triggers
de Datos all_triggers
dba_triggers
create trigger
create any trigger
Privilegios necesarios administer database trigger
alter any trigger
drop any trigger
AFTER LOGON
Disparadores de AFTER STARTUP
eventos de Base de BEFORE LOGOFF
Datos BEFORE SHUTDOWN
AFTER SERVERERROR
BEGIN
Procedimiento INSERT INTO log_logons
(sqltext)
ejecutado por el VALUES
disparador (user || ' - ' ||
TO_CHAR(SYSDATE));
END logproc;
/
Ejemplo de disparador CREATE OR REPLACE TRIGGER
de evento de Base de <trigger_name>
Datos. <trigger_type> ON DATABASE
CALL <procedure_name>
La tabla de ejemplo y /
el procedimiento
logproc deben ser CREATE OR REPLACE TRIGGER logintrig
creados antes que el AFTER LOGON ON DATABASE
disparador sea CALL logproc
compilado /
CREATE TABLE connection_audit (
login_date DATE,
Ejemplo para capturer username VARCHAR2(30));
los LOGON exitosos y -- trigger to trap successful logons
no exitosos CREATE OR REPLACE TRIGGER logon_audit
AFTER LOGON
ON DATABASE
BEGIN
INSERT INTO connection_audit
(login_date, username)
VALUES
(SYSDATE, USER);
END logon_audit;
/
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
163
4. EJERCICIOS PROPUESTOS
f. Genere una auditora que capture informacin de los usuarios que han
creado objetos en la base de datos durante el mes actual. Tip: Use
disparador DDL.
Resumen
http://www.java2s.com/Tutorial/Oracle/0560__Trigger/0040__Trigger.htm
En esta pgina, hallar algunos ejercicios sobre uso de disparadores.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
165
UNIDAD DE
APRENDIZAJE
6
SEMANA
14
TEMARIO
ACTIVIDADES PROPUESTAS
Una vez ejecutado las sentencias, para que se generen los archivos traces en el
servidor de Base de Datos, hay que desactivar el trace mediante:
Tambin existe la posibilidad de activar el trace para todas las sesiones de Bases
de Datos, pero no es recomendable, pues aparte de generar gran cantidad de
archivos traces, impacta en la performance del sistema. La sentencia es como
sigue:
2. SQL TRACE
Provee informacin sobre el rendimiento de cada operacin de SQL que procesa
el DBMS en una sesin.
Puede ser habilitado a nivel de una sesin (a demanda) o para toda sesin en una
instancia ORACLE (por configuracin) y su efecto es generar archivos de trazas.
SQLTrace es, bsicamente, un monitor no invasivo.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
167
DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(v_sid,v_serial#,TRUE)
4. Para terminar con el trace y que se puedan generar los archivos traces que
contengan el log de sentencias que se han generado, se desactiva el trace
como se muestra:
DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(v_sid,v_serial#,FALSE)
Por ejemplo:
Nota: para obtener la mayor funcionalidad del trace, debe estar habilitado el
parmetro de Base de Datos: TIMED_STATISTICS = TRUE
3. UTILITARIO TKPROF
Interpreta las medidas reportadas por un archivo de trace de una sesin y genera
un archivo legible configurable por el DBA.
TKPROF reporta, para cada sentencia ejecutada, los recursos que ha consumido,
el nmero de veces que fue invocada y el nmero de filas que proces. No reporta
COMMITs ni ROLLBACKs que son almacenados en el archivo trace.
TKPROF lista las estadsticas de una sentencia SQL, en una matriz formada por
filas y columnas. Cada fila corresponde a uno de los 3 pasos del procesamiento
de una sentencia SQL.
Ms Estadsticas Significado
COUNT Nmero de veces que la sentencia paso por las
acciones de parse, execute o fetch.
CPU Total de tiempo de uso de CPU en segundos que una
sentencia us en hacer todos los parse, execute o
fetch. Se muestra valor CERO si TIME_STATISTICS
= FALSE
ELAPSED Total de tiempo que se demor en hacer todos los
parse, execute o fetch. Se muestra valor CERO si
TIME_STATISTICS = FALSE
DISK Total de nmero de bloques de datos ledos desde los
datafiles en discos para todos los parse, execute o
fetch
QUERY Total nmero de buffers retornados en modo
consistente para todos los parse, execute o fetch
CURRENT Total nmero de buffers retornados de modo actual.
Estn las sentencias INSERT, UPDATE y DELETE.
ROWS Total nmero de filas procesadas por la sentencia
SQL. Este total no incluye las filas procesadas por los
subqueries usados en la sentencia SQL.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
169
Ms Estadsticas Significado
EXPLAIN Genera un EXPLAIN PLAN (plan de ejecucin). Esta
opcin debe incluir un usuario y clave vlido de Base
de Datos.
TABLE Usando el esquema especificado por la opcin
EXPLAIN el plan de ejecucin es almacenado en la
tabla especificada. Por defecto es el PLAN_TABLE
SYS ndica que el formateo debe incluir las sentencias
recursivas, por ejemplo, las que acceden al diccionario
de datos.
SORT Determina el orden en el cual las sentencias
aparecern en archivo formateado. Existen varias
opciones de SORT, entre ellas, para la fase de Parse,
para la fase de Execute y para la fase de Fetch.
RECORD Especifica el archivo en el cual las sentencias SQL en
el archivo trace debern ser escritas. Permite aislar
las sentencias SQL sin poner informacin acerca del
consumo del recurso. Las sentencias SQL recursivas
sern omitidas
PRINT Limita el nmero de sentencias SQL incluidas en el
archivo trace formateado.
INSERT Crea un script SQL que cuando es ejecutado, crear
una tabla llamada TKPROF_TABLE, y luego poblar
esta tabla con las estadsticas contenidas en el
archivo trace.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
171
4. PAQUETE DBMS_APPLICATION_INFO
Muchas veces, las sesiones de base de datos ( que puede ser tambin un
programa PL/SQL en ejecucin ), necesitan notificar o informar de su estado, o
simplemente, poner un comentario que identifica a la sesin.
PROCEDURE READ_CLIENT_INFO
Argument Name Type In/Out Default?
CLIENT_INFO VARCHAR2 OUT
PROCEDURE READ_MODULE
Argument Name Type In/Out Default?
MODULE_NAME VARCHAR2 OUT
ACTION_NAME VARCHAR2 OUT
PROCEDURE SET_ACTION
Argument Name Type In/Out Default?
ACTION_NAME VARCHAR2 IN
PROCEDURE SET_CLIENT_INFO
Argument Name Type In/Out Default?
CLIENT_INFO VARCHAR2 IN
PROCEDURE SET_MODULE
Argument Name Type In/Out Default?
MODULE_NAME VARCHAR2 IN
ACTION_NAME VARCHAR2 IN
PROCEDURE SET_SESSION_LONGOPS
Argument Name Type In/Out Default?
RINDEX BINARY_INTEGER IN / OUT
SLNO BINARY_INTEGER IN / OUT
OP_NAME VARCHAR2 IN DEFAULT
TARGET BINARY_INTEGER IN DEFAULT
CONTEXT BINARY_INTEGER IN DEFAULT
SOFAR NUMBER IN DEFAULT
TOTALWORK NUMBER IN DEFAULT
TARGET_DESC VARCHAR2 IN DEFAULT
UNITS VARCHAR2 IN DEFAULT
3.- Con el usuario SYSTEM abra otra sesin y realice la siguiente consulta:
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
173
Estructuras de memoria
Hay dos clases de memoria, una de ellas compartida por todos los usuarios
conectados y otra, dedicada al trabajo de cada uno de ellos.
El rea global del sistema SGA (system global area), es el rea compartida por
todos los usuarios y se divide en tres partes:
Los Archivos
Los archivos que maneja ORACLE se clasifican en cuatro grupos:
Una base de datos puede tener un solo espacio de tablas, pero, por las razones
anteriores, se recomienda varios espacios de tablas. Como mnimo, se debe tener
un espacio de tablas del sistema (SYSTEM), un espacio de tablas por cada
aplicacin, un espacio de tablas para los usuarios y otro espacio de tablas para los
ndices.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
175
Los archivos de datos (datafiles) almacenan los datos del usuario. Slo se
requiere de uno para una base de datos.
Un objeto de datos, por su parte, es una estructura lgica que puede ser una
tabla, un archivo de ndice, un archivo temporal, un archivo de deshacer o un
cluster. Estos objetos se almacenan fsicamente en segmentos que se componen
de extensiones (extents).
A su vez, una extensin est hecha de bloques que, de acuerdo con el sistema
operativo subyacente, puede tener un nmero determinado de bytes y que el DBA
especifica, en el momento de la creacin de la base de datos. EI tamao del
bloque es dependiente del sistema operativo y nunca puede ser menor al que ste
maneja.
En una base de datos, pueden existir otros objetos que no contienen datos como
las vistas, los sinnimos y las secuencias. Sin embargo, todo objeto,
independientemente de si contiene datos o no, debe pertenecer a un esquema.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
177
Tienen los cambios hechos a la base de datos para la recuperacin ante fallas o
para el manejo de las transacciones. Poseen los valores antes de una transaccin,
la orden ejecutada y, opcionalmente, el valor despus de la transaccin. EI
principal propsito de estos archivos es servir de respaldo de los datos en la
memoria RAM. Este conjunto de archivos debe estar conformado por dos grupos,
como mnimo, y se recomienda que cada grupo est almacenado en discos
separados. EI DBMS utiliza la tcnica de ir sobrescribiendo sobre la informacin
ms vieja, cuando se agota el espacio en estos grupos de archivos. Se puede
decir que guarda las instrucciones SQL que se van realizando en toda la base de
datos.
Los Procesos
Los procesos son programas que se ejecutan para permitir el acceso a los datos.
Los procesos se cargan en memoria y son transparentes para los usuarios. Los
procesos se clasifican en tres grupos: procesos de base, de usuario y procesos
servidores.
Los procesos de base (background) son los que se encargan de traer datos desde
y hacia la SGA, mejorando el desempeo al consolidar las tareas que son
impartidas por todos los usuarios. Cada proceso de base tiene su propia rea de
memoria. Los procesos de base o soporte son los siguientes:
LGWR: (Log writer) este proceso escribe datos desde la SGA a los archivos de
rehacer (redo log files) que sirven en caso de fallas en la instancia. Este proceso
es obligatorio y es el nico encargado de escribir y leer en estos archivos. El
proceso de llenado de estos archivos es circular, por lo tanto, antes de empezar a
sobrescribir en uno de ellos, se marca un punto de verificacin y LGWR enva la
orden de escritura en los datafiles al proceso DBWR. Cuando se cambia de uso
de grupo de redo log (archivo deshacer), se produce un SWITCH LOG
PMON: (Process Monitor) recupera los recursos del computador ante una falla de
un proceso de usuario; libera los recursos del proceso que fall.
Procesos Servidores
Ejecutan las rdenes SQL de los usuarios y llevan los datos al database buffer
cache para que los procesos del usuario puedan tener acceso a los datos. Se
pueden tener distintas arquitecturas para trabajar en ORACLE, segn los tipos de
servidores: dedicados o multihilos.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
179
configuracin, existen los despachadores (dispatchers), que son los que ante
algun requerimiento de sesin asignan dicho trabajo a un proceso servidor
disponible.
Instancia de ORACLE
El sistema de bases de datos ORACLE, cuando inicia, sigue los pasos que se
detallan a continuacin:
3. Abrir la base de datos. En este momento se abren los archivos y los usuarios
ya pueden tener acceso a los datos.
Resumiendo la Arquitectura
Servidor de datos
Base de datos
Procesos
Instancia
Memoria
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
181
6. DICCIONARIO DE DATOS
El diccionario de datos es el lugar donde Oracle almacena la informacin sobre la
estructura de la base de datos. Por ejemplo, el diccionario de datos almacena
informacin acerca de las estructuras fsicas y lgicas de la base de datos.
Tambin, registra la siguiente informacin:
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
183
Dependencias y restricciones
Estadsticas y auditora
Privilegios y concesiones
Usted puede acceder a los datos del diccionario de datos utilizando el lenguaje
SQL. Algunas vistas son accesibles para todos los usuarios de la base de datos;
otros son accesibles slo para los administradores de la base de datos.
Muchas de las vistas tienen tres diferentes instancias, que se conocen con las
siguientes denominaciones:
Por ejemplo, si el usuario SCOTT desea listar los nombres slo de las tablas de su
propiedad tendra que consultar a la vista USER_TABLES:
TABLE_NAME
------------------------------
BONUS
CUSTOMER
DEPT
DUMMY
EMP
ITEM
LOG_OBJETOS
ORD
PRICE
PRODUCT
RESUMEN_ORD
RESUMEN_ORD_DET
SALGRADE
TASAS
TEMP
15 rows selected
Ahora si SCOTT quiere listar tambin los nombres de las otras tablas de la base de
datos que tiene acceso (esto incluye a las de su propiedad) tendra que consultar
a la vista ALL_TABLES:
TABLE_NAME OWNER
--------------------------------------------------------- ------------------------------
DR$POLICY_TAB CTXSYS
LBAC_AUDIT_ACTIONS LBACSYS
OGIS_SPATIAL_REFERENCE_SYSTEMS MDSYS
USER_CS_SRS MDSYS
SDO_DIST_UNITS MDSYS
USER_TRANSFORM_MAP MDSYS
SDO_AREA_UNITS MDSYS
SDO_ELLIPSOIDS MDSYS
SDO_DATUMS MDSYS
SDO_PROJECTIONS MDSYS
CS_SRS MDSYS
SDO_ANGLE_UNITS MDSYS
TEMP SCOTT
EMP SCOTT
SALGRADE SCOTT
CUSTOMER SCOTT
PRODUCT SCOTT
LOG_OBJETOS SCOTT
TASAS SCOTT
RESUMEN_ORD_DET SCOTT
RESUMEN_ORD SCOTT
ITEM SCOTT
PRICE SCOTT
ORD SCOTT
DUMMY SCOTT
BONUS SCOTT
DEPT SCOTT
DUAL SYS
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
185
SYSTEM_PRIVILEGE_MAP SYS
TABLE_PRIVILEGE_MAP SYS
STMT_AUDIT_OPTION_MAP SYS
OLAPTABLEVELTUPLES SYS
OLAPTABLEVELS SYS
AW$CWMTOECM SYS
AW$EXPRESS SYS
AUDIT_ACTIONS SYS
PSTUBTBL SYS
ODCI_SECOBJ$ SYS
ODCI_WARNINGS$ SYS
DEF$_TEMP$LOB SYSTEM
HELP SYSTEM
WK$SYS_CONFIG WKSYS
WK$CRAWLER_CONFIG_DEFAULT WKSYS
WK$CHARSET WKSYS
WK$LANG WKSYS
WK$MIMETYPES WKSYS
WM$WORKSPACES_TABLE WMSYS
47 rows selected
Nota. Observe que esta vista ALL_TABLES no slo muestra todas las tablas de
propiedad de Scott, sino tambin las tablas de otros usuarios en las cuales tiene
acceso. Los permisos sobre las tablas de un determinado usuario usted los puede
encontrar accediendo a la vista TABLE_PRIVILEGES o ALL_TAB_ PRIVS. Por
ejemplo, si SCOTT quiere saber que privilegios le ha otorgado el usuario SYSTEM
para su tabla HELP, este seria el comando SQL a ejecutar:
Tambin:
Vista DBA_OBJECTS
Esta vista contiene informacin de TODOS los objetos de la Base de Datos, tal
como se observa en el siguiente cuadro:
Importante
SQL y PL/SQL no distinguen entre maysculas y minsculas por lo que todos los
datos de los objetos se convierten a maysculas antes de ser almacenados en las
tablas del diccionario de datos. Por tanto, deben emplearse maysculas cuando
se consulte el diccionario de datos.
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
187
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
189
CARRERAS PROFESIONALES
CIBERTEC
Bas e de Dat os Av anz ado I
191
Resumen