Sei sulla pagina 1di 305

SEMINARIO I

ORACLE
PL/SQL

Juan Carlos Garca


Master en Sistemas de Informacin Gerencial
FIEC ESPOL, Actualmente
Master en Administracin de Empresas
ESPAE - ESPOL, 2004
Licenciado Sistemas Informacin
FIEC - ESPOL, 2000
Analista Sistemas
PROTCOM - ESPOL, 1998
Microsoft Certified Professional
Developing Windows Application with Visual Basic
.NET
Developing Web Applications with C# .NET
Oracle Certified Professional
Oracle9i PL/SQL Developer
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Juan Carlos Garca

Conocimientos

Oracle, Programacin y Administracin


SQL Server, Programacin y Administracin
Informix, Programacin y Administracin
Visual Studio .NET, Visual Basic .NET, C#
Visual Studio 6.0
Java, J#
Macromedia Flash MX 2004, Dreamweaver MX 2004

Consultor
Administrador de Sistemas de Informacin
Desarrollo de Software

Actividades Profesionales

Modelamiento de Base de Datos


Modelamiento de Software Orientado a Objetos
Aplicaciones Distribuidas
Aplicaciones basadas en servicios WEB

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

CONTENIDO

ANSI SQL
SQL *PLUS
PL/SQL bsico
PL/SQL avanzado

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

FORMA DE EVALUACION
1er Parcial
20% Deberes
20% Lecciones
60% Examen

2do Parcial
20% Lecciones
20% Proyecto
60% Examen

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Polticas del curso

Habr lecciones peridicas.


Examen es terico y prctico.
Proyecto 2 personas
Deberes individuales
Hora de entrada mxima 20:05
Prohibido faltar a clases

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Parte I
Fundamentos de Oracle
SQL *Plus
Lenguaje SQL
Fundamentos de Administracin de Base de datos

ORACLE?
Fabricante de Software
Su producto estrella es la Base de Datos
ORACLE
Es la BD mas grande y vendida del mundo.
Ha creado varias lneas de productos y
servicios
http://www.oracle.com
http://www.otn.oracle.com
http://otn.oracle.com/documentation/index.html
Para DBAs y Arquitectos
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Productos ORACLE
Oracle Database 10g
Oracle Database 9i
Oracle Lite
Oracle Personal
Oracle Server
Oracle Development
Oracle Forms Server
ORacle Designer
Oracle JDeveloper
Oracle Business
Intelligence
Warehouse Builder
Data Mining

Oracle Collaboration Suite


Oracle Email
Oracle Calendar
Oracle Files
Oracle Voice
Oracle Application Server
Oracle Portal Server
Oracle Wireless Server
Oracle Discoverer

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Caractersticas de Oracle 9i

Roles de la Base de Datos

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ciclo de Desarrollo

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Oracle Server (RDBMS)

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Sentencias SQL
Data Manipulation Languaje (DML)
insert, update, delete
Oracle no considera el Select como
DML

Data Definition Languaje (DDL)


create, Alter, Drop

Data control Languaje (DCL)


grant, revoke

Transaction control
commit, rollback, savepoint
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Sentencias SQL

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

SQL *Plus
Es la primera herramienta para
seleccionar datos y administrar la BD
Se encuentra en el HOME de Oracle
HOME es el directorio donde esta
instalado el DBMS
home$/bin/sqlplus.exe scott/tiger@server

Cuando se realiza la conexin se crea


una sesin con la BD.
Permite ingresar una sentencia SQL
en varias lneas
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Rol de SQL * Plus

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Diferencias entre SQL y SQL * Plus


Un lenguaje
ANSI Standard
Palabras claves no
abreviadas
Sentencias que
manipulan datos y
definen tablas en la
base de datos
Se alamacenan en
el buffer

Un ambiente
Oracle propietario
Se puede abreviar
las palabras claves
Comandos que no
permiten
manipulacin de
valores en la BD
No se almacenan
en el buffer

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Comando SELECT
SELECT
SQL> SELECT empno, ename, sal
2 FROM emp
3 WHERE ename='SMITH';

Nombres de columnas, tablas y


comandos SQL no son sensibles a
maysculas
Mientras que SMITH si porque asi
estan grabados los datos
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Operaciones con los campos

Seleccionar todas las columnas *


Seleccionar columnas especificas
Definir alias de columnas
Controlar valores NULOS
Realizar operaciones aritmticas
Concatenar |
Uso de literales o constantes
Suprimir filas duplicadas

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Jerarqua de los objetos


Oracle agrupa lgicamente los objetos de la
BD basados en el usuario que creo los
objetos.
tablas, vistas, stored procedures

Parte de la jerarqua de los objetos (una


tabla) es su dueo.
select * from scott.emp

A nivel de columnas es el nombre de la


tabla.
select emp.empno, emp.ename from scott.emp

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Datos de tablas y aritmticos


Oracle permite realizar operaciones
aritmticas sobre los datos
select empno, ename, sal, sal*1.08 from
emp

Ejercicios
Mostrar el nuevo salario de los
empleados con el aumento del 8%
Calcule el sueldo anual de los empleados
Calcule el 20% de comisiones mas
sueldos
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Precedencia operadores
PEMDAS

Parntesis
Exponente
Multiplicacin
Divisin
Adicin
Substraccin

Ejercicios

2+6/2
(2+6)/2
2/10+36*(84-6)
2/10+36*84-6

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

La tabla DUAL
Oracle permite hacer operaciones sin
campos de alguna tabla
Por ejemplo para realizar una simple suma
select 2+2 from dual

Dual es una tabla especial que


Tiene una columna llamada DUMMY
Tiene un solo registro que es una X
El dueo es el usuario SYS

Ejemplo
select user from dual;
select sysdate from dual;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Valores NULOS
Nada es llamado NULL
NULL representa un campo vaco
NULL no es carcter en blanco
NULL tampoco es cero
Es la ausencia de informacin

select empno, ename, mgr from emp;


El empleado 7839 tiene un valor NULL
Si desea sustituir NULL por un valor debe
usar la funcin NVL
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Funcin NVL()
Sintaxis
NVL(nombre_columna;valor_si_es_null)

Puede ser utilizada para todos los


tipos de datos
El tipo de dato valor retornado siempre
debe ser el mismo que el valor evaluado

Ejercicios
Si MGR es NULL debe presentar 0
Si MGR es NULL presentar Jefe
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

La clusula Distinct
Omite los valores duplicados en una
salida de SELECT
select job from emp;
select distinct job from emp;

Cuando hay mas campos distinct


toma las combinaciones de estos
select distinct job, empno from emp;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Uso de Alias
Oracle trunca los nombre de campo
cuando estos son calculados
El uso del alias soluciona este
problema
select empno, ename, nvl(mgr,0) as mgr
from emp;

La clusula AS no es necesaria
select empno, ename, nvl(mgr,0) mgr
from emp;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Concatenacin
Puede combinar columnas y valores
constantes con ||
select ename || ', quien es el ' || job || '
de la compaa' as "Nombre y rol
from emp

Tambin puede usar la funcin:


concat(valor1,valor2)
select concat(ename, ', quien es el ') ||
job ||' de la compaa' as "Nombre y rol"
from emp
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

SQL*Plus
Obtiene datos de la BD
SELECT * FROM emp;

El ; hace que se ejecute directamente el


query
Muchas veces se utiliza / para ejecutar
sentencias en lote.
Tenga cuidado con repetir ; y / ya que
ejecutaria dos veces el comando

Puede ampliar el ancho de pagina y de


lneas para ver mejor los resultados
SET LINESIZE 100
SET PAGESIZE 80
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Comando CHANGE
Permiten corregir errores: c/viejo/nuevo
Facilitan la escritura de los comandos
SQL> select empno, ename, nvl(mgr, 'none') mgr
2 from emp;
select empno, ename, nvl(mgr, 'none') mgr
*
ERROR en lnea 1:
ORA-01722: nmero no vlido
SQL> 1
1* select empno, ename, nvl(mgr, 'none') mgr
SQL> c/'none'/0
1* select empno, ename, nvl(mgr, 0) mgr
SQL> /
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Otros comandos SQL*Plus


DESCRIBE nombre_tabla
Retorna el detalle de la estructura de una tabla
Este comando se puede abreviar a desc

desc emp;
LIST
Muestra lo que hay actualmente en el bfer

DEL numero
Elimina el numero de la lnea especificada
DEL 3

APPEND cadena
Agrega una cadena a la lnea actual
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Otros comandos SQL*Plus


CLEAR BUFFER
Borra el contenido del bfer

INPUT
Permite insertar una nueva lnea en el bfer

RUN
Ejecuta el contenido del bfer

Numero cadena
Agrega una cadena en la lnea especificada
Si ya existe esta es reemplazada
Si no existe se agrega al final
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Otros comandos SQL*Plus


SPOOL {filename|OFF|OUT}
Permite escribir la salida de SQL*Plus en un
archivo con extensin .lst
Off desctiva la salida
spool res.out

SAVE nombre_archivo
Graba el contenido del bfer en un archivo

EXIT
Cierra el SQL*Plus

Grabar el contenido de SQL*Plus en HTML


SQL> set markup html on
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Usando un editor de texto


Sql*Plus almacena el ultimo comando
SQL en afiedt.buf
Para editarlo podemos hacerlo con el
comando ed
El editor default es el NOTEPAD
Para cambiar el editor por default puede
hacer en las variables de ambiente

El uso del editor da mayor facilidad


para escribir comandos SQL grandes
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Utilizando scripts
Se pueden grabar los comandos SQL
en distintos archivos con extensin
.sql
Comando get
Obtiene el contenido de un script y lo
almacena en afiedt.buf
Luego se ejecuta presionando /

Comando @ o start
Obtiene el contenido almacenndolo en
el bufer y ejecutndolo en un solo paso
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Algunos errores mas comunes


ORA-00904: invalid column name
ORA-00923: FROM keyword not found where
expected
ORA-00942:table or view does not exist
ORA-00933: SQL command do not finish
correctly

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Capitulo 2
Catalogo de la Base de Datos
Objetos de la Base de Datos

Catalogo de la Base de Datos


Permite ver como estn estructurados los
objetos de la base de datos
Sin el catalogo no se podran acceder a las
tablas, vistas, constraints, etc.
Estos datos se almacenan en tablas seguras
creadas por el usuario SYS al momentos de
la instalacin
Oracle ofrece vistas para mostrar el catalogo
Vistas para todos los objetos
Vistas solo para objetos de usuario
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Objetos
Los objetos de usuario se almacenan
en la tabla OBJ
El dueo de esta tabla es SYS

Las tablas de usuario se almacenan


en TAB
El dueo de esta tabla es SYS

Existen vistas creadas por el usuario


SYS para ver el catalogo de la base
de datos
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Vistas para todos los objetos


ALL_OBJECTS
Es una vista que muestra todos los objetos de la
Base de datos

ALL_TABLES
Muestra todas las tablas de la Base de datos

ALL_TAB_COLUMNS
Muestra las columnas de todas las tablas

ALL_CONSTRAINTS
Muestra todos los constraints.

Tambin hay vistas para usuarios, ndices,


etc.
ALL_INDEXES, ALL_USERS, ALL_TYPES
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Vistas solo para objetos usuario


USER_TABLES
Muestra las tablas de usuarios
USER_TAB_COLS o USER_TAB_COLUMNS
Es una vista que tiene informacin de las columnas de
una tabla
USER_TRIGGERS
Muestra los triggers relacionados con la tabla de
usuario
USER_CONTRAINTS
Muestra los constraints de usuario
Tambin hay vistas para ndices, dependencias, etc.
USER_INDEXES, USER_VIEWS, USER_USERS,
USER_TYPES, USER_OBJECTS

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Capitulo 3
Creando tablas.
Sentencias DDL
Uso de scripts

Sistema control de Activos

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Creando tablas
Se utiliza el comando DDL
create table s1_depto
(idDept number(3),
nombreDept varchar2(30))
El dueo de la tabla es el usuario que
inicio la sesin actual

Crear una tabla con datos a partir de


otra tabla ya existente
Create table nombre_tabla
as select * from emp;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Tipos de datos comunes


NUMBER

Almacena datos numricos

DATE

Almacena fechas.
Internamente ORACLE almacena la fecha como
numero.

VARCHAR2

Almacena texto
Es de longitud variable

CHAR

Almacena texto
Es de longitud fija

ROWID

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Modificar la estructura de la tabla


Se utiliza el comando DDL alter table
Para agregar un nuevo campo
alter table s1_depto
add (tareas varchar2(250));

Para modificar un campo existente


alter table s1_depto
modify (tareas varchar2(200));

Eliminar un campo de la tabla


alter table s1_depto
drop column tareas;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Consideraciones importantes
Hay que tener cuidado al modificar la
estructura de una tabla
Operaciones aceptables
Incrementando el tamao de una columna
char o varchar2
Incrementando el tamao de una columna
number
Operaciones decrementar tamao
Crear una copia de la columna en otra tabla
Realizar el cambio

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Borrar, Renombrar tablas


Borrar una tabla
drop table s1_depto;
No se puede realizar un roll back

Renombrar un tabla
rename s1_depto to depto;
alter table depto to s1_depto

Truncar una tabla


Borra los datos de una tabla.
Es mas rpido que el comando DELETE
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Documentar una tabla


Es muy til para nuevos usuarios
comment on table s1_depto
is Guarda los departamentos de la cia
Comment on column s1_depto.idDepto
Is Es la clave principal

Estos comentarios se almacenan en:


USER_TAB_COMMENTS
USER_COL_COMMENTS

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Definiendo constraints
Los constraints permiten:
Permiten crear las relaciones entre las tablas.
Mantienen la integridad de los datos

Previene que se eliminen


registros si estos tienen
dependencias en otras tablas
Tipos de constraints

Primary Key
Foreign Key
Unique
Check
Not null

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Tipos de constraints
Se pueden crear de dos formas
A nivel de campo
A nivel de tabla

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Primary Key
Indica que columna debe ser nica y no nula. La PK
puede tener mltiples columnas.
PK constraint a nivel de tabla
create table s1_depto

(idDept number(3),
nombreDept varchar2(30),
constraint pk_dept_01
primary key (idDept));
PK constraint a nivel de columna
create table s1_depto

(idDept number(3)
constraint pk_dept_01 primary key,
nombreDept varchar2(30));

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Primary Key
Se recomienda significativamente
definir los nombresde los constraintns
create table s1_depto

(idDept number(3) primary key,


nombreDept varchar2(30));
En este caso ORACLE le asigna un
nombre automticamente

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Primary Key compuesto


Se puede tener una clave primaria
compuesta
En este caso la PK debe definirse a nivel de
tabla
create table cabFactura (

ao number(4),
numero number(4)
fecha date not null,
constraint pk_cabfac_01
primary key(ao, numero));
Ingresar datos y probar ingresando una
clave duplicada
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

UNIQUE constraints
La columna debe ser un valor nica.
Es muy til para definir las AK (Alternate key)
Create table s1_empleado (
Id_emp number(4) primary key,
Cedula char(10) constraint unq_Cedula unique,
Nombre varchar2(25),
Apellido varchar2(25),
Cargo varchar2(35),
Extension number(4),
Telefono number(10),
Lugar varchar2(30))
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

NOT NULL constraint


Con este constraint las columnas no
pueden tener valores nulos
Solo se definen a nivel de columna

Create table sistuacion


idSituacion number(2),
Situacion varchar(25) constraint nnu_situacion not null,
Constraint pk_situac_01
primary key (idSituacion));

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Foreign Key
Permite crear una relacin entre dos
tablas
La columna en ambos lados debe ser del
mismo tipo.
No es necesario que tengan el mismo
nombre pero es una buena idea hacerlo
Previene eliminar datos que estn
relacionados
No se puede eliminar un departamento si
este tiene empleados

Una relacin va de un campo PK a un FK


Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Creacin de una Foreign Key


A nivel de COLUMNA

create table depreciacion(


idDepreciacion number(6),
idActivo number(5) CONSTRAINT fk_Dep_Act
REFERENCES activos(idActivo),
fechaDepreciacion date,
monto number(8,2));

A nivel de TABLA

create table depreciacion(


idDepreciacion number(6),
idActivo number(5),
fechaDepreciacion date,
monto number(8,2),
CONSTRAINT fk_Dep_Act FOREIGN KEY (idActivo)
REFERENCES activos(idActivo));

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo 1
drop table sjc_hija;
drop table sjc_padre;
create table sjc_padre (
id number(3) constraint pk_sjc_padre primary key,
nombre varchar2(30),
estado char(1));
create table sjc_hija (
id numeric(3),
sec number(2),
detalle1 varchar2(20),
detalle2 varchar2(20),
constraint pk_sjc_hija primary key (id,sec),
constraint fk_sjc_hija_padre foreign key (id) references
sjc_padre(id));

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo 2
drop table sjc_hija;
drop table sjc_padre;
create table sjc_padre (
id number(3) constraint pk_sjc_padre primary key,
nombre varchar2(30),
estado char(1));
create table sjc_hija (
id numeric(3) constraint fk_sjc_hija_padre references
sjc_padre(id),
sec number(2),
detalle1 varchar2(20),
detalle2 varchar2(20),
constraint pk_sjc_hija primary key (id,sec));

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

CHECK constraint
Definen una condicin que cada fila
debe satisfacer.
Permite verificar y validar los datos.
La expresin de la condicin es la
misma que en un SELECT excepto
por:

Referencias a las pseudocolumnas


CURVAR, NEXTVAL, LEVEL Y ROWNUM.
Llamadas a SYSDATE, UID, USER
Referencias a otros valores de columnas
o filas

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Creacin de un CHECK
Create table prf_empleado (
Id_emp number(4) primary key,
Cedula char(10) unique,
Nombre varchar2(25),
Apellido varchar2(25),
Cargo varchar2(35),
Salario number(8,2) constraint chk_salario check (salario
between 50 and 500),
Extension number(4),
Telefono number(10),
Lugar varchar2(30),
Estado char(1) constraint chk_estado check (estado in ('A',
'E'))
);
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Operaciones con los CONSTRAINTs


A parte de la creacin se puede:
Agregar un constraint a una tabla ya
creada.
Eliminar un contraint.
Habilitar o Deshabilitar

El comando DDL que permite hacer


esto es el:
ALTER TABLE

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Agregando un constraint
Ejemplo:
Agregar una Foreign Key a la tabla de
empleados con la tabla de
departamentos
ALTER TABLE prf_empleado ADD
CONSTRAINT fk_emp_dep FOREIGN
KEY(id_Dep) REFERENCES
prf_departamento (id_Dep);

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Eliminando un CONTRAINT
Ejemplo
Eliminar una FOREIGN KEY
ALTER TABLE prf_empleados DROP
CONSTRAINT fk_emp_dep

El nombre de un constraint se
encuentra en las vistas del diccionario
de datos: USER_CONSTRAINTS y
USER_CONS_COLUMNS

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Deshabilitar y Habilitar un CONSTRAINT

Deshabilitar
ALTER TABLE prf_empleados DISABLE
CONSTRAINT fk_emp_dep CASCADE;
CASCADE es opcional y deshabilita todos
los constraints dependientes

Habilitar
ALTER TABLE prf_empleados ENABLE
CONSTRAINT fk_emp_dep;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Consultando los CONSTRAINTS


El diccionario de datos tiene toda la
informacin de los constraints
Constraints
SELECT constraint_name,
constraint_type,search_condition FROM
user_constraints WHERE table_name =
PRF_EMPLEADO;

Columnas asociadas a los CONSTRAINTS


SELECT constraint_name, column_name
FROM user_cons_columns WHERE
table_name = PRF_EMPLEADO;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicio
Crear las tablas de Cabecera y Detalle de
Facturas
Definir los constraints respectivos

PK, FK,
CHECK: precio mayor a 0
NOT NULL, campos importantes
Una vez creados los constraints consultarlos
desde el diccionario de datos
Agregar el campo estado a la cabecera de la
factura con un constraint de tipo CHECK que
valide que el estado de la factura sea A o E
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Secuencias
Son una buena forma de hacer que la BD
genere automticamente claves primarias
enteras y nicas
CREATE SEQUENCE schema.name
INCREMENT BY
START WITH x
MAXVALUE x
MINVALUE x
CYCLE
CACHE x
ORDER

NOMAXVALUE
NOMINVALUE
NOCYCLE
NOCACHE
NOORDER

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Parmetros de secuencias
Name

Es obligatorio. Es el nombre de la secuencia.

Por defecto es 1. No se permite el valor cero.


Si se especifica un entero negativo, la secuencia
desciende en el orden.

INCREMENT BY

START WITH

Es un entero opcional que permite que la secuencia


comience en cualquier numero.

MAXVALUE

Es un entero opcional que coloca un lmite en la


secuencia.

NOMAXVALUE

Es opcional. Hace que el lmite mximo ascendente sea


1027 y 1 para las secuencias descendentes.

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Parmetros de secuencias
MINVALUE

Es opcional. Determina el mnimo de una secuencia.

Hace que el lmite mnimo ascendente sea 1 y 1026


para secuencias descendentes.

NOMINVALUE
CYCLE

Permite continuar la secuencia an cuando se alcance el


mximo.
Si se alcanza el mximo, el siguiente nmero de
secuencia generado es el valor mnimo de la secuencia.

NOCYCLE

No permite que la secuencia genere valores ms all del


mximo o del mnimo definidos.

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Parmetros de secuencias

CACHE

Permite que los nmeros de la secuencia para ser asignados


previamente estn almacenados en la memoria
Hace posible obtener un acceso ms rpido.

No permite la asignacin previa de nmeros de secuencia.

Garantiza que los nmeros de secuencia sean generados en el


orden en que se solicitan.

NOCACHE
ORDER

NOORDER

No garantiza que los nmeros de secuencias sean generados


en el orden en que son solicitados.

Crea una secuencia que se incrementa en 5 empieza en 100

CREATE SEQUENCE adrs_seq


INCREMENT BY 5
START WITH 100;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

NEXTVAL
Es una pseudo columna NEXTVAL.
Crea un nmero de secuencia nuevo
Esta debe estar precedida por nuestro
nmero de secuencia.
Por ejemplo,
adrs_seq.nextval devuelve 100 para el primer
acceso y 105 para el segundo.

Si es necesario determinar el nmero de la


secuencia actual.
Usaremos CURRVAL en lugar de NEXTVAL.

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Capitulo 4
Limitando, Ordenando, y
Manipulando datos

WHERE
Permite filtrar o limitar informacin
Las comparaciones estn basadas en:

x
x
x
x
x
x

=y
>y
>= y
<y
<= y
<> y ; x!= y ; x ^= y

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Condicin LIKE
Es una comparacin especial para filtrar informacin
con caracteres
% -> Usado para mltiples caracteres
_ -> Usado para un solo carcter
SELECT ename, job, sal WHERE ename like S%
Muestra todos los empleados cuyo nombre empiece con
S

A veces se utiliza como una manera mas corta de


realizar las consulta que la condicin Between
SELECT ename, hiredate FROM emp WEHRE
hire_date like %99
Esto muestra los empleados contratados desde
1Enero 1999 hasta 31 Diciembre 1999

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Condicin Between
Permite hacer comparaciones entre un
rango de datos.
Es decir entre un valor inicial y un valor
final
Select * from emp where sal between 2500 and
3000

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Condicin IN
Especial comparacin para un set de
valores
Select * from emp where deptno in (10, 20,
30);

Puede ser usada con cualquier tipo de


datos
Select ename, sal from emp where job in
(Salesman,Manager);

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Condicin NULL
Filtra los valores nulos.
Puede filtrase como IS NULL o IS NOT
NULL
SELECT ename, sal, comission WHERE
comission IS NULL
SELECT ename, sal, comission WHERE
comission IS NOT NULL

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Condiciones mas especificas


x and y
Ambas deben ser verdaderas

x or y
Una de ellas es verdadera

Not X
El opuesto lgico de x

X is null
Permite filtrar los valores nulos

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Orden de precedencia
Los operadores siguen la siguiente
precedencia:

Recuerde que los parntesis obligan a


cambiar el orden

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

ORDER BY
Tienen dos tipos
asc -> ascendente
desc -> descendente
Los valores nulos pueden aparecer al final de la lista
(asc) o al principio (desc)
Puede ser aplicado a columnas de tipo NUMBER,
VARCHAR2, CHAR, DATE
Puede indicar la columna usando su posicin
Select empno, ename, sal from emp
Order by 2 desc, 3 desc;
Puede ordenar por el alias del campo
SELECT ename, sal*12 anual FROM emp ORDER BY
anual

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicios 1
Listar los empleados que ganen mas de
$900 por ao y cuyo apellido este entre la
QU y ZU
Listar los empleados que no sean del
departamento 20 y 30 ordenados por cargo
ascendentemente
Listar los empleados que ganen menos de
100 o mas de 800 y cuyo apellido empiece
con S o con T
Listas los empleados que no ganen entre
300 y 350, y que hayan sido contratados
entre el 15 Feb 1998 y el 15 Oct 1999
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicios 2
Listar los empleados que no tienen
Jefe
Listas todos los empleados que no
ganen $500, $800, y $1200

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Capitulo 5
Funciones SQL

Funciones SQL

Existen dos tipos de funciones SQL

Funciones de fila nica

Reciben una nica fila y retorna un nico valor por


cada una de ellas

Funciones de filas mltiples

Pueden manipular un grupo de mltiples filas y


retornan un nico valor por cada grupo. Se conocen
como funciones agregadas y sern revisadas mas
adelante.

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Funciones tipo texto


LPAD(x,y[,z])
Rellena y caracteres a la izquierda de x. Si z no
es especificado se rellena con espacios en blancos.
RPAD(x,y[,z])
Rellena y caracteres a la derecha de x. Si z no
es especificado se rellena con espacios en blancos.
LOWER(x)
Convierte x en minuscula
UPPER(x)
Convierte x en mayuscula
INITCAP(x)
Convierte la primera letra en mayscula y el resto
en minscula
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Funciones tipo texto

LENGTH(x)
Retorna la longitud de x.
SUBSTR(x,y[,z])
Retorna una subcadena de la cadena x empezando
con la posicion inicial y hasta el z. Si z no es
definido se ira hasta el final
INSTR(x,y)
Determina la posicin inicial en donde se ha encontrado
la cadena y dentro de la cadena x
TRIM(x)
Simplemente borra espacios a la izquierda y a la
derecha de la cadena x
TRIM(opcion x from columna)
Opcion puede ser leading, trailing, o both. Reemplaza x
caracteres a la columna especificada

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Funciones tipo texto

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Funciones numricas
ABS(x)
Retorna el valor absoluto de un numero

ROUND(x,y)
Redondea un numero x de acuerdo a la
cantidad de decimales definido por y

ROUND(x,y)
Trunca un numero x de acuerdo a la cantidad
de decimales definido por y

MOD(x,y)
Devuelve el residuo de la divisin entre x y y

SQRT(x)
Devuelve la raz cuadrada de x
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Funciones tipo lista


Trabajan con diferentes tipos de
datos
Char, varchar2, number, date

Greatest(x,y,....)
Retorna el valor mas grande de la lista

Least(x,y,....)
Retorna el valor ms pequeo de la lista

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Funciones de tipo Fecha


ADD_MONTHS(x, y)
Retorna la fecha x mas los meses y
LAST_DAY(x)
Retorna el ultimo da del mes de la fecha x
MONTHS_BETWEEN
Retorna el numero de meses entre la fecha x y
la fecha y
NEXT_DAY(x,y)
Retorna la fecha siguiente a x indicado por el
da y
Adicionalmente podemos realizar operaciones
aritmticas con las fechas
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Funciones de tipo Fecha

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Funciones de conversin

Para asignaciones
De

VARCHAR2 o CHAR

NUMBER

VARCHAR2 o CHAR

DATE

NUMBER

VARCHAR2

DATE

VARCHAR2

Evaluacin de expresiones
De

VARCHAR2 o CHAR

NUMBER

VARCHAR2 o CHAR

DATE

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Funciones de conversin
Diseadas para convertir informacin entre tipos de
datos diferentes
TO_CHAR(x[,y])
Convierte un numero o una fecha a carcter de
acuerdo al formato especificado
TO_NUMBER(x)
Convierte un valor no numrico a numrico
TO_DATE(x[,y])
Con el valor x a una fecha usando el formato
definido en y

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Caracteres para el formato de Numero


9

Representa un nmero

Obliga a mostrar el cero

Muestra el signo dlar

Usa el smbolo moneda local

Smbolo decimal

Smbolo de miles

SELECT ename,
format(sal,$9,999,999.00) Salario FROM
emp
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Caracteres para el formato en Fecha

DAY, muestra el nombre del da


DY, Da semana abreviado Mon, Fri
D, Da de la semana (17)
DD, Da del mes (1-31)
DDD, Da del ao (1366)
MON, muestra el mes abreviado
MM, dos dgitos para el mes (01-12)
MONTH, muestra el nombre del mes
YY, muestra el ao en dos dgitos
YYYY, muestra el ao completo
YEAR, el ao en letras
W, Semana del mes (15)
WW, Semana del ao (153)
RM, Numero del mes en Romano (I-XII)
SCC o CC, Siglo

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplos
SELECT SYSDATE,
TO_CHAR(SYSDATE,'MONTH'),
TO_CHAR(SYSDATE,'DD'),
TO_CHAR(SYSDATE,'YEAR') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'MONTH'),
TO_CHAR(SYSDATE,'Month'),
TO_CHAR(SYSDATE,'month') FROM dual;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicio
Mostrar la fecha de ingreso de los
empleados en formato da, numero
de la semana, mes en letras, y el ao

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Caracteres para el formato de Hora

HH24, Hora del da (0-23)


HH o HH12, Hora del medio da
MI, Minutos de la Hora (0-59)
SS, Segundos del minutos (0-59)
SSSSS, Segundos del da (0-86399)

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Funciones anidadas
Es la capacidad de utilizar el resultado de una
funcin como parmetro de otra.
Se ejecutan desde el nivel mas profundo hasta el
mas alto.
SELECT nvl(to_char(mgr),No tiene jefe) FROM
emp;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Funciones que evalan valores nulos


NVL(x,y)
NVL2(x,y,z)
Si x no es NULL devuelve y si es NULL
devuelve z

NULLIF(x,y)
Compara x con y si son iguales retorna NULL
si no son iguales retorna la primera.

COALESCE(v1, v2, v3, .... vN)


Retorna el primer valor no NULL de la lista

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Funcin DECODE()
Es el equivalente a la estructura
condicional mltiple.

SELECT decode (column_name,


value1, sustituto1,
value2, sustituto2,
.......
valor_default)

En caso de no encontrar ningn que


coincida se puede definir un valor por
default
Ejemplo

Aumentar el sueldo de acuerdo al cargo de cada


empleado.

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Funcin CASE
Es el equivalente a DECODE.

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercios
Escribir el SELECT para las siguientes
salidas.
SMITH gana $1000 pero quiere ganar
$3000.
SMITH
*******$500
KING
******$8000
SANDER
*******$600
Mostrar el da, mes y ao completo de la
fecha contratacin
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Otras funciones
USER
Devuelve el username del usuario actual

UID
Devuelve el ID del usuario actual

USERENV(opt)

ISDBA, devuelve verdadero o falso


SESSIONID, el ID de la session
LANGUAGE, el idioma actual
TERMINAL, el nombre de la maquina
Ejemplo

select userenv('terminal') from


dual

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Deber 1
Listado de vendedores cuyo apellido
este desde la A hasta la J.
Listado de empleados cuya primera
letra este en la A, C, F, G, P, V, y Z.
Todos los proveedores cuyo ultimo
digito de la cedula este entre 1 y 4. (
si no existe el campo puede crearlo)
Muestre el tiempo de vida til de los
activos.
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Deber 2
Muestre el tercer y cuarto digito de la serie
para los vehculos, edificios y maquinarias
Agregar un campo (char(1)) a la tabla de
empleados que indique el estado del
mismo. Esto es: A->'Activo, D>'Despedido', R->'Retirado'. Y
posteriormente liste los empleados con su
respectivo estado.
Las fechas de mantenimiento usualmente
se planifican un mes antes. Emita un
listado de los activos a dar mantenimiento
el mes siguiente.
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Deber 3
Muestre el valor del primer mes de
depreciacin de los vehculos y de los
equipos de computacin
Muestre todos los activos cuyo valor de
rescate sea cero. En caso de ser nulo
muestre "No existe".
Emita un listado de los activos con el
respectivo departamento de acuerdo a lo
siguiente:
"El activo 1 fue pedido por el departamento de
Finanzas y esta a cargo de Tala Rubio"
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Capitulo 6
Usando Varias Tablas
Seleccin avanzada de Datos

Producto cartesiano

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Joins (Sintaxis Oracle)


Un join es la relacin que hay entre
dos tablas. Existen tres tipos:
Left
Right
Natural

Select ename, d.deptno, dname


From emp e, dept d
Where e.deptno=d.deptno

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Natural join (Sintaxis Oracle)


Se basa en la relacin natural que
hay entre dos tablas
No hay que igualar los cdigos en la
sentencia WHERE.
Es muy fcil de utilizar.
select ename, deptno, dname
from emp natural join dept;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Outer join (Sintaxis Oracle)


Indica si se muestra los datos aun si
no coinciden con la relacion.
select ename, e.deptno, dname
from dept d, emp e
where d.deptno (+)= e.deptno
/

select ename, e.deptno, dname


from dept d, emp e
where d.deptno = e.deptno(+)
/
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Sintaxis ANSI/ISO

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Sintaxis ANSI/ISO
Es una sintaxis que se aplica para los joins
utilizado en SQL Estndar
Esta sintaxis es a partir de Oracle 9i
Select e.name, e.deptno, d.dname

From emp e left outer join dept d


On d.deptno = e.deptno;
Right Join
Select e.name, e.deptno, d.dname

From emp e right outer join dept d


On d.deptno = e.deptno;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Capitulo 7
Funciones agregadas

Funciones agregadas

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Funciones agregadas o de grupo

Permiten agrupar datos y se utilizan dentro de la clusula


SELECT
Avg(x)
Calcula el promedio de una columna
Count(x)
Cuenta el numero de registros no nulos
Max(x)
Calcula el valor mas grande
Max(x)
Calcula el valor mas pequeo
StdDEv(x)
Calcula la desviacion estandar
Sum(x)
Calcula la suma de todos los registros
Variance(x)
Calcula la varianza de todos los valores

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicios
Mostrar el sueldo mas alto
Mostrar el sueldo mas bajo
Mostrar cuanto paga en sueldos la
empresa
Mostrar cuantos empleados hay en la
compaa
Mostrar el promedio de sueldos que
gana un empleado
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Utilizando la clusula group by


Permite agrupar datos en un select
Select job, count(job)
From emp
Group by job;

Select deptno, avg(sal), job


From emp
Group by deptno;

Select deptno, job, avg(sal)


From emp
Group by deptno, job;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicios
Muestre el numero de personas por
departamento
Muestre el sueldo mas alto por
departamento
Muestre el sueldo mas bajo por
departamento
Muestre el monto que la empresa
paga en sueldos por cada
departamento
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Excluyendo datos agrupados


HAVING, se utiliza con group by para
excluir datos
Por ejemplo si solo deseamos ver los
departamento que en promedio tengan
que pagar mas de $2000 de sueldo.
Select deptno, job, avg(sal)
from emp
group by deptno, job
having avg(sal) > 2000;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicio
Consultar el mnimo y mximo sueldo
de los empleados en cada
departamento cuyo salario mas
pequeo sea de 500
SELECT deptno, MIN(sal), MAX (sal)
FROM emp
GROUP BY deptno
HAVING MIN(sal) < 500;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Capitulo 8
Subqueries

Subquery

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Subqueries
Bsicamente es un select dentro de otro
select.
Select ename, d.deptno, sal
from emp e join dept d on
d.deptno = e.deptno
where d.loc = NEW YORK
Select ename, deptno, sal
from emp
where deptno = (select deptno
from dept
where loc = NEW YORK)
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Tipos de subqueries
Retornan una fila
Retornan varias filas

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicio
Mostrar el nombre del empleado que
mayor sueldo tiene.
Mostrar los departamentos cuyo
salario menor es mayor que el salario
menor del departamento 10

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

IN y EXISTS
Son dos comandos para evaluar un
conjunto de valores.
Select ename, deptno, sal
from emp
where deptno in (select deptno
from dept
where deptno in (10,20))

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo con EXISTS


Mostrar todos los departamentos que
no tienen empleados
SELECT deptno
FROM dept d
WHERE NOT EXISTS
(SELECT * FROM emp e
WHERE d.deptno
= e.deptno);

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Trabajar con varias consultas


Muchas veces necesitamos comparar
la salida de dos o mas consultas para
lo cual tenemos los siguientes
operadores

UNION
UNION ALL
INTERSECT
MINUS

Es muy til para unir datos que estn


dispersos en varias tablas
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

UNION
Sirve para unir dos o mas consultas
en una sola sin considerar las filas
duplicadas
SELECT deptno FROM dept
UNION
SELECT dept FROM emp;
DEPTNO
---------10
20
30
40
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

UNION ALL
Sirve para unir dos o mas
consultas en una sola
considerando todas las filas
SELECT deptno FROM dept
UNION
SELECT dept FROM emp;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

INTERSECT
Sirve para unir dos o mas
consultas en una sola
considerando solo las filas que
estn en ambos querys
SELECT deptno FROM dept
INTERSECT
SELECT dept FROM emp;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

MINUS
Sirve para unir dos o mas consultas
en una sola considerando solo las
filas que estn en el primer query
pero no en el segundo
SELECT deptno FROM dept
MINUS
SELECT dept FROM emp;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

La pseudocolumna ROWNUM
Cada fila que se extrae de un query
tiene un indicador secuencial que
empieza desde uno.
Por ejemplo si solo desea los
primeros 5 registros de la tabla de
emp ejecute:
select ename, sal
from emp
where rownum <=5

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

La pseudocolumna ROWNUM
Ahora si deseamos consultar los 5
empleados con salario mas alto sera
incorrecto lo siguiente:

select ename, sal


from emp
where rownum <=5
order by sal desc

Esto se debe porque el order by se hace


despus de que se ha ejecutado el Where

Una solucin a este problema sera:

select ename, sal


from (select ename,sal from emp
order by sal desc)
where rownum <=5

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicio
1. Crear una tabla de provincias con 5
registros en donde se guarde el
nombre.
2. Crear un campo ID para crear un
campo secuencial utilizando la
sentencia UPDATE con ROWNUM

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicios
Calcular el activo de mayor costo
Calcular cuantos activos fijos estn
obsoletos
Cual es el promedio de compra de
activos de este ao
Cual es la computadora mas cara
Cual es el carro mas barato

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicios 1
Con la tabla EMP y DEPT mostrar el
nombre, cargo, salario + comisiones
de todos los empleados cuya
comisin es mayor que la del
empleado ALLEN
Con sus tablas de activos fijos
Mostrar todos los activos que se les haya
dado cuando menos dos mantenimientos
Cual es el Mes que ms se ha comprado
activos fijos
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicios 2
Mostrar los activos mas caros de cada categora
Listar la suma de precio de comprar de los activos
agrupados por proveedor y categora
Cual es el cdigo, nombre, proveedor y categoria del
activo mas caro
Cual es el cdigo, nombre, proveedor y categora del
activo mas barato
Mostrar el numero de activos daados durante el
primer trimestre del ao actual
Cuantas computadoras para el departamento de
sistemas se compraron el ao anterior
Mostrar todos los activos cuyo precio de compra es
mayor que el promedio de precio de compra
Mostrar los activos que mayor gasto de
mantenimiento han demandado ordenados por id
activo
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicios 3
Es importante saber que activos ya tienen
mas del 80% de su vida til ya que no se
les debe hacer ningn mantenimiento,
porque es preferible comprar uno nuevo.
Emitir un listado de los proveedores que
nos han vendido activos por mas de $5000
desde hace tres aos ordenados por
nombre y monto
Mostrar el monto invertido en
mantenimiento para todos los activos que
tienen mas de 5 de estos
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicios 4
Emitir un listado de todos loa activos ordenados por
categoria y que sean mayor que el promedio
de compra de los mismos.
Mostrar todos los activos que no tengan ningun
registro en la tabla de depreciacion
Cuales son los empleados que no tinen a cargo
activos
Mostrar el numero de activos por departamento que
no se les ha dado mantenimiento
Cada activo se debe marcar como especial si su precio
de combra es mayor que el promedio de precio
de compra de todos los activos.
Crear una tabla para procesos estadistiscos con los
activos que ingresaron por mes y cuyo valor
actual sea menos del 50% de su costo original.
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Deber (20 Puntos)


Crear un sistema de control de
pedidos para lo cual se desea crear el
modelo e implementarlo en una BD
Oracle.

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Utilizando subtotales (RollUp)


Oracle incluye el uso de OLAP
Online Analytical Procesing
Esto es ampliamente usado en
aplicaciones datawarehouse
Select deptno, job, sum(sal) as salary
From emp
Group by rollup(deptno,job);

Note que si hay valores nulos esto se va


afectar el resultado final
Disponible en Oracle 8i o posterior
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Cube
Es una extensin similar a rollup pero
crea subtotales para todas las
posibles combinaciones.
Select deptno, job, sum(sal) as salary
From emp
Group by cube(deptno,job);

Disponible en Oracle 8i o posterior

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Capitulo 9
Vistas
Sinnimos
Queries Jerrquicos

Que es una vista?


Es una representacin lgica de un set de
datos de una o varias tablas
Se graban como un select en el diccionario
de datos. Se puede observar en la vista
USER_VIEWS
Ventajas
Restringe el acceso a los datos de una tabla. Por
ejemplo para ocultar el campo sueldo.
Permiten simplificar complejos queries
dividindolos en queries mas simples y
pequeos
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Que es una vista?

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Creando una vista


CREATE OR REPLACE VIEW
view_name AS subquery;
El subquery puede ser cualquier
comando SELECT
No puede llevar la clusula ORDER BY

Ejemplo
CREATE VIEW vw_prf_emp01
AS SELECT ename, job, deptno
FROM EMP WHERE SAL>1000;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Obteniendo datos de la VISTA


Simplemente hay que hacer un
SELECT de la VISTA
Ejemplo

SELECT *
FROM vw_prf_emp01
ORDER BY DEPTNO

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Modificando una vista


Se tiene que agregar la clusula
OR REPLACE
Ejemplo
CREATE OR REPLACE VIEW vw_prf_emp01
AS SELECT ename, job, deptno
FROM EMP
WHERE sal between 1000 and 5000
and deptno in (10,20,30);

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Eliminar una vista


Simplemente ejecutando el comando
DROP VIEW view_name;
Ejemplo
DROP VIEW vw_prf_emp01;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Que es un sinnimo?
Simplifica el acceso a los objetos
creando otro nombre.
Permiten
Ocultar el nombre real de una tabla y dar
acceso con otro nombre a otros usuarios.
Hacer mas corto el nombre de los
objetos

CREATE [PUBLIC] SYNONYM


synonym_name FOR object;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplos de Sinnimos
Crear un nombre mas corto para la
vista vw_prf_emp01
CREATE SYNONYM s_Emp
FOR vw_prf_emp01

Eliminar un sinnimo
DROP SYNONYM s_Emp;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Queries Jerrquicos
Una base de datos relacional no almacena
los datos jerrquicamente
Sin embargo existe una relacin jerrquica entre
las filas de una tabla recursiva

Quieries jerrquicos se utilizan en algunos


campos

Medicina
Geografa
Ensamblado de productos
Estructuras organizacionales
Investigacin de especies

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Estructura Jerrquica

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Select Jerrquico

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Caminando en el rbol jerrquico


Punto de Partida
Especifica
empieza)
START
START
START

la fila raz de la jerarqua (donde

WITH mgr is null


WITH ename = MILLER
WITH puede tener un subquery

Relacin padre hijo


Especifica las columnas estableciendo la relacin
padre e hijo
CONECT BY PRIOR empno=mgr
CONECT BY PRIOR mgr=empno

No es ANSI SQL
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo
Empleados que estn a cargo de JONES

select ename, job, empno


from emp
start with ename='JONES'
connect by prior empno=MGR

Lista empleados y jefes

select ename || ' reporta a ' || PRIOR ename


from emp
start with ename = 'KING'
connect by prior empno=mgr

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Niveles jerrquicos

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo
Mostrar grficamente la estructura de
la organizacin
select lpad(ename,
length(ename)+(level*4)-4,'_') as org
from emp
start with ename='KING'
connect by prior empno=mgr

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Eliminando ramas

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Capitulo 10
Salida con Formato en SQL*Plus

Formatear con SQL*Plus


SQL solo muestra la informacin sin
formato.
Esto limita la salida

SQL*Plus permite customizar y crear


reportes con la informacin del
SELECT
Los comandos de SQL*Plus permiten
formatear cada columna y de distintos
tipos de datos.
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Cabeceras y Pies de Paginas


TTITLE titulo del reporte
Define el titulo del reporte, es similar al
encabezado de pagina
Las comillas son opcionales

BTITLE Nombre
Define el titulo para el pie del reporte.

Estos ttulos permanecen en toda la sesin


Si desea deshabilitarlos cambie
TTITLE OFF
BTITLE OFF

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Nombres de columnas
Cada columna puede mostrar su propio
titulo
Es similar a definir un alias pero esta vez es
para el reporte
Facilitan la compresin del reporte

COLUMN ename HEADING Nombre


Si la cabecera tiene mas de una palabra
necesariamente utilice las comillas
Si desea una cabecera de dos lneas utilice |
Si desea borrar las cabeceras use

COLUMN ename CLEAR


Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Formato para los tipos de datos


Utilice la clusula FORMAT
COLUMN ename FORMAT A15
COLUMN sal FORMAT $9,999.99

LIKE se utiliza para indicar que el


formato de una columna es igual a la
otra
COLUMN comm LIKE sal
Tambin copia la cabecera de la columna

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Grupos o Puntos de quiebre


Permite suprimir valores repetidos
Tambin es til para crear totales en los
reportes.
Ejemplo:
BREAK ON deptno

Puede hacer puntos de quiebre con mas de


una columna
BREAK ON col1 ON col2

Es necesario que la consulta este ordenada


de acuerdo al punto de quiebre especificado
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Grupos o Puntos de quiebre


BREAK ON deptno SKIP 2
Deja doble espacio entre cada cambio
departamento

CLEAR BREAK
Borra y deshabilita los comandos breaks

BREAK ON PAGE
Realiza un punto de quiebre por cada pagina

BREAK ON REPORT
Realiza el punto de quiebre al final del reporte
til para obtener el total general del reporte

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Totales de grupos
BREAK ON deptno SKIP 2
COMPUTE SUM OF sal ON deptno
Suma los salarios por cada cambio de
departamento

Mas opciones de COMPUTE

COMPUTE
COMPUTE
COMPUTE
COMPUTE
COMPUTE

AVG OF sal ON deptno


MAX OF sal ON deptno
MIN OF sal ON deptno
COUNT
NUMBER

CLEAR COMPUTE
Borra y deshabilita los COMPUTE
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo
set pagesize 50
set linesize 100
TTITLE 'Listado de empleados'
BTITLE 'JDepartamento de Sistemas'
COLUMN dname FORMAT A10
COLUMN sal FORMAT $99,999.99
COLUMN comm LIKE sal
COLUMN
COLUMN
COLUMN
COLUMN
COLUMN
COLUMN
COLUMN
COLUMN

dname HEADING DEPT.


empno HEADING NUMERO
ename HEADING NOMBRE
job HEADING CARGO
mgr HEADING MANAGER
hiredate HEADING 'FECHA|CONTRATO'
sal HEADING SALARIO
comm HEADING COMISION

BREAK ON dname SKIP 4


COMPUTE SUM OF sal ON dname
select dname, empno, ename, job, mgr, hiredate, sal, comm
from emp e, dept d
where e.deptno = d.deptno
order by dname
/
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Solicitando datos con &


Es muy comn pedir los datos desde el teclado para
realizar consultas mas dinmicas. Por ejemplo
Select * from &tabla;

Va a pedir el valor para tabla.


Select ename from emp
Where sal > &SalMinimo

Va a pedir un valor antes de ejecutar


el Select
Select ename From emp Where
substr(ename,1,1)=&Letra

En caso de ser texto va entre


comillas simples
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ingresando datos con ACCEPT


1 PROMPT Ingrese un titulo con una
longitud mximo 30 caracteres.
2 ACCEPT MiTitulo PROMPT Ingrese
Titulo:
3 TTITLE CENTER MiTitulo SKIP 2
4 SELECT * FROM DEPT;
Este ejemplo pide el titulo del reporte
y lo almacena en la variable MiTitulo
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicio
Crear un reporte interactivo que pida
la categora de activo y muestre
todos los activos pertenecientes a
dicha categora.
El reporte debe agrupar los datos por
departamento mostrando los respectivos
totales basados en el precio del activo.

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Configuracin de PL/SQL
SET UNDERLINE carcter
Define el carcter de subrayado en la
cabecera de los titulos.
Por default es
Por ejemplo

SET UNDERLINE *
Define como carcter de
subrayado el asterisco
EMPNO
ENAME
JOB
MGR
********** ********** ********* **********
7369 SMITH
CLERK
7902
7499 ALLEN
SALESMAN
7698
7521 WARD
SALESMAN
7698
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Configuracin de PL/SQL
SET AUTOCOMMIT OFF|ON|NUMBER
ON
Le dice a SQL*Plus que por cada select
confirme los cambios.
Evita el uso del comando commit

NUMBER
Es mas especifico e indica que cada n
comandos haga un commit

OFF
Es el default, cada cambio hay que
realziarlo manualmente con commit;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Arquitectura de Oracle
Conceptos bsicos de administracin de Oracle
SGA
PGA
Procesos

Tareas de un DBA
Planificar y crear la base de datos
Asegurar la disponibilidad de la BD
Administrar las estructuras fsicas y
lgicas
Administrar la Seguridad
Administracin de la Red
Respaldos y Recuperacin
Performance de la Base de Datos
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Componentes primarios del DBMS

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Conceptos bsicos
Un Servidor de Base de Datos Oracle
esta compuesto por:
Instancia de Oracle
Base de Datos

Oracle Database

Discos y espacios de almacenamiento


Otros archivos fsicos que permiten configurar
una instancia
Usuarios y procesos de servidor
Otros procesos

Instancia de Oracle

Estructura de la memoria
Procesos en background

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Conexin con una Instancia


Consiste en establecer una conexin creando una
sesin
Es un puente en un proceso de usuario y un proceso
de servidor
Una instancia de Oracle siempre abre una y solo una
base de datos

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Base de datos Oracle


Estructura lgica
Estructura fsica
Data Files
Contienen los datos actuales en la base de
datos
Control Files
Tienen informacin necesario para mantener y
verificar la integridad de los datos
Redo Log Files
Contienen un registro de los cambios hechos a
la base de datos, permitiendo recuperarse en
caso de fallas
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Estructura de la memoria
SGA (System Global Area)
Es el primero y mas importante
componente de la memoria de Oracle
Cuando los DBAs hablan de la memoria
generalmente se refieren a la SGA

PGA (Program Global Area)


Destinada para los procesos de usuario
Permiten almacenar informacin de
variables, reas de ordenamiento,
cursores, y otros procesos
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Oracle Database Architecture

Memory Structure
Program Global Area
(PGA)

System Global Area (SGA)

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Componentes de la SGA
Esta formada por
Buffer Cache
Almacena datos en memoria
Shared Pool
Almacena instrucciones y definiciones
Esta diseado para ofrecer performance a la
Base de Datos en ambientes multiusuario
Redo Log Buffer

Hay dos estructuras opcionales que pueden


estar en la SGA
Large Pool
Java Pool
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Buffer Cache
La memoria esta formada por buffers
El tamao de cada buffer es el mismo
que un bloque de la base de datos
Un bloque es la unidad mas pequea que
usa Oracle para almacenar informacin
que puede ser algunas filas de una tabla

El buffer cache tiene dos propsitos


Proveer performance al guardar datos de
sentencias SELECT repetidas en memoria
Grabar los datos rpidamente en
memoria para luego pasarlos al disco
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Shared Pool
Tiene dos estructuras obligatorias
Library Cache
Almacena el texto de sentencias SQL y el plan
de ejecucin para un posible reuso
Dictionary Cache
Tambin se conoce como Row Cache
Guarda informacin recin procesada del
diccionario de datos tales como definiciones de
tablas, columnas, nombres de usuario, claves y
privilegios o permisos

El componente opcional contiene


Informacin de la sesin y procesos de usuario
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Redo Log Buffer


Almacena informacin temporal en
memoria
Informacin generada por sentencias
DML es decir insert, update, delete y
adems create, alter, y drop
Esta informacin se mantiene hasta que
los datos son pasados al disco

Si alguna falla ocurre, el DBA puede


usar la informacin del RLB para
recuperar alguna informacin
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Oracle Database Architecture

Memory Structure
System Global Area (SGA)
Program Global Area
(PGA)

Buffer
Cache
Redo Log
Buffer

Shared Pool
Library Cache
Dictionary Cache

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Tipos de procesos
Proceso de Servidor
Server processes
Es el mas importante desde la
perspectiva del usuario

Proceso de Red
Network processes

Procesos en background
Background processes

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Procesos de Servidor
Consiste en leer informacin desde el
disco y llevarla al buffer cache
Una vez que la informacin est en el
buffer cache el usuario la puede
manipular

Hay dos formas que el DBA puede


configurar el servidor de procesos
Servidor compartido
Servidor dedicado
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Proceso de Servidor Dedicado


Cada usuario conectado a la BD tiene
un proceso exclusivo atendindolo
Si hay 150 usuarios conenctados habr
150 procesos leyendo datos del disco y
llevndolos al buffer cache

Implica memoria adicional y un CPU


con algunos procesadores
Es la configuracin mas eficiente
siempre y cuando haya un buen
servidor
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Proceso Servidor Compartido


Hay pocos procesos atendiendo
muchos usuarios
Un usuario puede ser atendido por uno o
varios procesos de servidores

Ideal para aplicaciones de Internet


Esta configuracin tambin se conoce
como:
MTS (Multithreaded server)

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Proceso de Red
Llamado Dispatcher
Se utiliza en conjunto con un proceso de
servidor compartido

El dispatcher coloca los procesos de


requerimiento de datos en una cola
En un servidor Oracle pueden estar
configurados
Varios dispatchers
Varios procesos de servidor
Esta configuracin reduce el uso de memoria y
procesadores adicionales
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Procesos en background
DBW0
Database writers

LGWR
Log Writer

CKPT
Checkpoint

SMON
System Monitor

PMON
Process Monitor
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Oracle Database Architecture


Memory Structure
System Global Area (SGA)
Redo Log
Buffer

Program Global Area


(PGA)

Buffer
Cache

LGWR

CKPT

Shared Pool
Library Cache
Dictionary Cache

DBWR

Data1.dbf
Data2.dbf
Data3.dbf

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

SMON

PARTE II
Programacin PL/SQL
Conceptos avanzados de
Administracin de Base de Datos

Programacin PL/SQL
Estructura
Tipos de datos y Variables
Excepciones

PL/SQL
Es la base de la programacin en ORACLE
Es un lenguaje de desarrollo de aplicaciones de
base de datos
Soporta todos los comandos SQL
Adicionalmente ofrece
Estructuras condicionales y repetitivas
Operaciones de cursor
Tipos de datos abstractos
Modularizacin
Encapsulacin
Overloading
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

PL/SQL

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Usos y Beneficios de PL/SQL


Es fcil de usar y aprender
Se almacena con la Base de Datos
Fcil mantenimiento y distribucin
Rpido y seguro
Permite procesar grandes bloques de datos
Provee de una estructura llamada cursor for
loop
Provee de paquetes de cdigo
Este cdigo permite realizar operaciones
especializadas de I/O; acceso a pginas
WEB, SQL dinmico, programar tareas

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Usos y Beneficios de PL/SQL


Soporta encapsulacion y modularizacion
Un bloque PL/SQL puede llamar a funcionalidades de
otro bloque PL/SQL
Modularizacion significa dividir grandes tareas o
procesos en bloques mas pequeos

Permite agrupar los procedimientos o funciones en


paquetes
Soporta Overloading

Ocurre cuando hay paquetes que contiene el mismo


nombre de procedimiento o funcin pero con
diferentes tipos de datos

El cdigo PL/SQL es portable


Funciona independiente de la plataforma
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Usos y Beneficios de PL/SQL

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Estructura de un bloque PL/SQL


DECLARE
/*Seccin declarativa Aqu se incluyen
variables PL/SQL, Tipos, Cursores y
subprogramas locales*/
BEGIN
/*Seccin ejecutable Aqu se incluyen las
instrucciones SQL y procedimentales*/
EXCEPTION
/*Seccin de tratamiento de excepciones
Aqu se
incluyen instrucciones de
control de excepciones*/
END;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Tipos de Bloques
Annimo
Procedimiento
Funcin

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Variables
Es necesario declarar las variables y las
constantes antes de hacer referencia a ellas
en cualquier otra instruccin
Sintaxis general

nombre_variable tipo [CONSTANT] [NOT NULL] [:=valor]

Ejemplos
DECLARE
vPrdPrecio NUMBER := 45;
vDescripcion VARCHAR2(50);
vdirEmba
CHAR;
vEdad NUMBER NOT NULL :=0;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Asignacin de variables
Operador de asignacin
vPrdPrecio :=15.26;

Utilizando SELECT o FETCH


SELECT prdPrecio
INTO vPrdPrecio
FROM producto
WHERE prdNum = 10;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Constantes
Se utiliza la palabra clave CONSTANT
Ejemplo
porcIva CONSTANT NUMBER := 0.12;

Se debe declarar una variable o constante


por lnea
Incorrecto
DECLARE
vNombre, vApellido VARCHAR2(20);
Correcto
DECLARE
vNombre VARCHAR2(20);
vApellido VARCHAR2(20);
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

La palabra clave DEFAULT


Permite inicializar variables
Es lo mismo que :=
vSalario NUMBER DEFAULT 10.50;

Tambin se puede usar DEFAULT


para
Inicializar parmetros y
Campos de un cursor de un subprograma
en registros definidos por el usuario

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Tipos de Datos
Hay tres categoras de tipos de datos:
Escalar
No tienen componentes

Compuestos
Registros, tablas, vArrays

Referencias
Punteros a otros tipos

Estos tipos de datos vienen en un


paquete denominado STANDARD
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Tipos escalares
NUMBER
Es igual al tipo NUMBER de la BD
nombre_variable NUMBER [(P,S)]
P es precisin y S escala

VARCHAR2
Similar al tipo VARCHAR2 de la BD
nombre_variable VARCHAR2 (L)
L es la longitud desde 1 hasta 32767 bytes
L en una columna de BD es hasta 4000 en 8i, 9i
L en una columna de BD es hasta 2000 en
Oracle 7.x
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Tipos escalares
CHAR [(L)]
L es la longitud y es opcional

L es la longitud desde 1 hasta 32767 bytes


L en una columna de BD es hasta 2000 bytes
en 8i, 9i
L en una columna de BD es hasta 255 bytes
en Oracle 7.x
Son de longitud fija

DATE
Igual al tipo DATE de la BD
Almacena desde el siglo hasta el segundo
Utiliza 7 bytes (1 para cada componente)
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Tipo de Datos LOB

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

%TYPE
Hace flexible los cambios de la base
de datos en la siguiente compilacin
de un procedimiento PL/SQL sin
cambiar el cdigo
Declare
vSalario emp.salario%TYPE;
vTemp NUMBER(7,3) NOT NULL := 12.3;
vTemp1 vTemp%TYPE;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Estructuras de control PL/SQL


Condiciones
IF exp_booleana_1 THEN
secuencia_de_instrucciones;
ELSIF expresion_booleana_2 THEN
secuencia_de_instrucciones;
...
ELSE
secuencia_de_instrucciones;
END IF;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo 1
Cambia la carrera de un estudiante
Set serveroutput off;
declare
v_numEst s11_estudiante.id%type;
v_carrera s11_estudiante.carrera%type;
begin
v_numest:=&numest;
v_carrera := '&carrera';
update s11_estudiante
set carrera=v_carrera
where id = v_numest;
if sql%notfound then
dbms_output.put_line('No existe el estudiante');
else
dbms_output.put_line('Especialidad actualizada correctamente');
end if;
end;
/
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo 2

Determina si un aula es grande o pequea

DECLARE
v_aula s11_aula.id_aula%type;
v_puestos s11_aula.num_puestos%type;
v_mensaje varchar2(20);
BEGIN
v_aula:=&aula;
select num_puestos into v_puestos
from s11_aula
where id_aula = v_aula;
if v_puestos < 20 then
v_mensaje:='Aula pequea';
elsif v_puestos >= 20 and v_puestos < 50 then
v_mensaje:='Aula Grande';
else
v_mensaje:='Es un Auditorium';
end if;
dbms_output.put_line(v_mensaje);
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('imposible de determinar');
END;
/

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

El paquete DBMS_OUTPUT
Muestra mensajes en pantalla
Para esto hay que seguir dos pasos:
SET SERVEROUTPUT ON/OFF/[SIZE n]
N es el tamao del buffer de salida
El tamao por default es 2000 bytes
El tamao mximo es 1000000 de bytes

DBMS_OUTPUT.PUT_LINE
Aade un mensaje al buffer y lo muestra en
pantalla

SET SERVEROUTPUT ON SIZE 1000000


Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplos
Crear un bloque PL/SQL que pida el
cdigo del estudiante y muestre su
nombre y apellido
Crear un bloque PL/SQL que permita
crear nuevas materias
Crear un bloque PL/SQL que permita
modificar el numero de crditos de
una materia

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Sentencia CASE
CASE test_var
WHEN valor1 THEN
secuencia_instruciones_1;
WHEN valor2 THEN
secuencia_instruciones_2;
...
WHEN valorn THEN
secuencia_instruciones_n
ELSE otra_secuencia
END CASE;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicio
Pedir el ID del estudiante, el ID del
paralelo y mostrar su apellido +
nombre, descripcin de materia y el
estado ya sea aprobado, reprobado o
cursando.
Pedir un numero y mostrarlo en letras

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Bucles
PL/SQL tiene 4 tipos de bucles
Bucles simples
LOOP

Bucles WHILE
Bucles FOR numricos
Bucles FOR de cursores

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

LOOP
Es el tipo de bucle ms bsico
LOOP

secuencia_de_instrucciones;
END LOOP;
Es un bucle indefinido ya que no tiene una
condicin de parada
Sin embargo puede aadir una condicin mediante
EXIT

EXIT WHEN condicin


EXIT es lo mismo que

IF condicin THEN
EXIT;
END IF;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicio
Ingresar 100 registros en la tabla
s11_temp con la secuencia y su
nombre concatenado con la secuencia

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Bucles WHILE
WHILE condicin LOOP
secuencia_de_instrucciones;
END LOOP;
La condicin se evala antes de cada
interaccin
Si es FALSA o NULA termina
Puede usar las instrucciones EXIT o
EXIT WHEN dentro del WHILE
Repetir el ejercicio anterior con
WHILE
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Bucle FOR numrico


FOR contador IN [REVERSE] lim_superior..lim_inferior LOOP
secuencia_de instrucciones
END LOOP;

El nmero de iteraciones es definido.


Los lmites solo se evala una vez.
Escribir el ejercicio anterior usando FOR
El ndice o contador tiene que ser declarado
antes del bucle.
REVERSE ejecutar el FOR desde el limite
superior hasta el inferior
Los limites pueden estar en variables

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Registros en PL/SQL
Los tipos compuestos son definidos por el
usuario
Para utilizar el registro hay dos pasos
Definir el tipo
Declarar las variables del tipo

TYPE tipo_Registro IS RECORD (


campo1 tipo1 [NOT NULL] [:= expr1],
campo2 tipo2 [NOT NULL] [:= expr2],
...
campon tipon [NOT NULL] [:= exprn]);
Tipo_registro en el nombre del tipo
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo de TYPE
DECLARE
TYPE t_Materia IS RECORD(
id_materia
s11_materia.id_materia%type:=10,
nombre s11_materia.nombre_materia%type:='Seminario I',
total_creditos s11_materia.total_creditos%type :=3,
total_Stud
NUMBER(3):=18);
v_Materia t_Materia;
BEGIN
insert into s11_materia
values (v_Materia.id_materia, v_materia.nombre,
v_materia.total_Creditos,v_materia.total_estud);
END;
/

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Uso de %ROWTYPE
Define un registro con los mismos
tipos de datos de una tabla
Al igual que %TYPE no incluyen las
restricciones NOT NULL
Si cambia la definicin de la tabla
%ROWTYPE tambin lo hace.
Como en el caso de %TYPE,
%ROWTYPE se evala cada vez que
se ejecuta o se compila el bloque
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo de %ROWTYPE
declare
v_Materia s11_materia%ROWTYPE;
begin
v_Materia.id_Materia:=20;
v_Materia.nombre_materia:='Programacin I';
v_MAteria.total_creditos:=3;
v_Materia.total_Estud:=40;
insert into s11_materia
values(v_Materia.id_materia,v_Materia.nombre_mate
ria,
v_MAteria.total_creditos,v_Materia.total_Estud);
end;
/
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Estilo correcto de Programacin


Utilice comentarios cortos y precisos
Al principio de cada bloque o procedimiento
Al declarar una variable
Antes de cada seccin de cada bloque

Declarar variables descriptivas

v_NombreVariable Para variables


e_NombreExcepcion Para excepciones
t_NombreTipo Para excepciones
p_NombreParamtero Para parmetros
c_NombreConstante Para constantes

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Estilo correcto de Programacin


Escribir en maysculas

Palabras reservadas (BEGIN, ELSE)


Funciones predefinidas (COUNT, SUBSTR)
Tipos predefinidos (BOOLEAN, NUMBER)
Palabras claves (SELECT, INTO, WHERE)

Escribir en minsculas
Los nombres de objetos de BD (tablas, campos)

Mezclar minsculas y maysculas


Nombres de variables, la primera letra en
minscula y en mayscula la primera letra de
cada palabra

Identar
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Capitulo 8
Cursores Explcitos
Cursores Implcitos

Conceptos Bsicos
Oracle procesa una instruccin SQL
asignado un espacio de memoria
llamada rea de contexto
Un cursor es un puntero al rea de
contexto
PL/SQL utiliza cursores para todas las
instrucciones de acceso a la
informacin de la BD

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Tipos de cursores
Implcitos
No es necesario declararlo, abrirlo o
cerrarlo
Sirven para procesar instrucciones
INSERT, UPDATE, DELETE y SELECT
INTO de una fila

Explcitos
Son declarados, abiertos y cerrados
Procesan una instruccin SELECT de mas
de una fila
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Pasos para procesar cursor explicito


Hay 4 pasos
Declarar el cursor
Apertura del cursor para una consulta
Extraccin de los resultas en variables
PL/SQL
Cerrar el cursor

La instruccin SQL del cursor puede


ser cualquier instruccin de consulta
vlida
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Declaracin de un Cursor
Consiste en
Definir su nombre
Asociar una instruccin SQL

Sintaxis
CURSOR nombre_cursor IS
instruccin_SQL;

La instruccin SELECT no contiene la


clusula INTO esta solo se utiliza en
los cursores implcitos
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplos
Declare
v_Aula sjc_paralelo.id_aula%type;
v_Materia sjc_paralelo.id_materia%type;
CURSOR c_Clases IS
SELECT * from sjc_paralelo
WHERE id_aula=v_Aula and
id_Materia=v_Materia;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Abrir el cursor
OPEN nombre_cursor;
Cuando se abre un cursor:
Se examinan los valores de las variables
de acoplamiento
Se determina el conjunto activo
Se hace apuntar el puntero a la primera
fila

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo
Declare
v_Materia sjc_paralelo.id_materia%type;
CURSOR c_Clases IS
SELECT * from sjc_paralelo
WHERE id_Materia=v_Materia;
Begin
v_Materia:=130;
OPEN c_Clases;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Extraccin de datos
Se utiliza la instruccin FETCH .. INTO
FETCH nombre_cursor INTO
lista_varibales;
FETCH nombre_cursor INTO
registro_PL/SQL;

Nombre_cursor es un cursor
previamente declarado y abierto
Las variables deben ser compatibles
en cuanto al tipo de datos
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo
Declare

v_Materia sjc_paralelo.id_materia%type;
CURSOR c_Clases IS
SELECT * from sjc_paralelo
WHERE id_Materia=v_Materia;
v_Paralelo c_Clases%ROWTYPE;
BEGIN
v_Materia:=130;
OPEN c_Clases;
FETCH c_Clases INTO v_Paralelo;
FETCH c_Clases INTO v_Paralelo;
FETCH c_Clases INTO v_Paralelo;
END;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Atributos asociados al cursor


%NOTFOUND

FALSE
Cuando se ha ido a buscar una fila
TRUE
Si el ltimo FETCH no devuelve una fila
NULL
Si el SELECT del cursor no ha devuelto ningn
dato

%FOUND

Es lo opuesto lgicamente de %NOTFOUND con


respecto a TRUE y FALSE, pero se evala aun
como NULL si el FETCH del cursor no devuelve
ningn dato.

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Atributos asociados al cursor


%ROWCOUNT
Determina cuntas filas son
seleccionadas en cualquier punto del
FETCH
Se incrementa despus de una seleccin
de una fila con xito.
Adems %ROWCOUNT est en cero
cuando se abre el cursor por primera vez

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Atributos asociados al cursor


%ISOPEN
Es o TRUE o FALSE, dependiendo de que
est abierto el cursor asociado.
Antes de que se abra el cursor y despus
de que se cierre, %ISOPEN es FALSE.
En caso contrario, es evaluado como
TRUE.

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicio
Registrar automticamente a todos
los estudiantes de la carrera de
Historia en el paralelo 502.
Tambin debe registrar el id y el nombre
y apellido como una sola cadena en la
tabla temporal.

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Bucle LOOP y cursor


DECLARE
v_ID sjc_Estudiante.id%TYPE;
v_FirstName sjc_Estudiante.first_name%TYPE;
v_LastName sjc_Estudiante.last_name%TYPE;
CURSOR c_Historia IS
SELECT id, first_name, last_name
FROM sjc_Estudiante
WHERE carrera = 'History';
BEGIN
OPEN c_Historia;
LOOP
FETCH c_Historia INTO v_StudentID, v_FirstName, v_LastName;
EXIT WHEN c_Historia%NOTFOUND;
INSERT INTO sjc_registro (id_estudiante, id_paralelo)
VALUES (v_StudentID, 502);
INSERT INTO temp_table (num_col, char_col)
VALUES (v_StudentID, v_FirstName || ' ' || v_LastName);
END LOOP;
CLOSE c_HistoryStudents;
END;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Bucle WHILE y cursor


DECLARE
v_ID sjc_Estudiante.id%TYPE;
v_FirstName sjc_Estudiante.first_name%TYPE;
v_LastName sjc_Estudiante.last_name%TYPE;
CURSOR c_Historia IS
SELECT id, first_name, last_name
FROM sjc_Estudiante
WHERE carrera = 'History';
BEGIN
OPEN c_Historia;
FETCH c_Historia INTO v_StudentID, v_FirstName, v_LastName;
WHILE c_Historia%FOUND LOOP
INSERT INTO sjc_registro (id_estudiante, id_paralelo)
VALUES (v_StudentID, 502);
INSERT INTO temp_table (num_col, char_col)
VALUES (v_StudentID, v_FirstName || ' ' || v_LastName);
FETCH c_Historia INTO v_StudentID, v_FirstName, v_LastName;
END LOOP;
CLOSE c_HistoryStudents;
END;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Bucle FOR y cursor


DECLARE
CURSOR c_Historia IS
SELECT id, first_name, last_name
FROM sjc_Estudiante
WHERE carrera = 'History';
BEGIN

-- La declaracin de v_Historia es implicita y se define como c_Historia%Rowtype

FOR v_Historia IN c_Historia LOOP

-- Aqu se ejecuta una instruccin FETCH implcita.


-- c_Historia%NOTFOUND tambin se comprueba implcitamente, para
-- ver si se han realizado las extracciones.

INSERT INTO sjc_registro (id_estudiante, id_paralelo)


VALUES (v_Historia.ID, 502);
INSERT INTO temp_table (num_col, char_col)
VALUES (v_Historia.ID, v_Historia.FirstName || ' ' ||
v_Historia.LastName);
END LOOP;
END;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Cursores parametrizados
El cursor admite parmetros al igual que una
funcin o procedimiento
Declare

CURSOR c_Historia(p_Carrera
sjc_Estudiante.carrera %TYPE)
IS
SELECT id, first_name,
last_name
FROM sjc_Estudiante
WHERE carrera = p_Carrera;
Los valores de los parmetros se asignan en la
instruccin OPEN
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Open c_Historia(Historia);

Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicio
Cambie el ejercicio anterior con
cursores parametrizados

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Cursores SELECT FOR UPDATE


Permiten modificar las filas extradas
por el cursor.
Consta de dos partes
La clusula FOR UPDATE en la
declaracin del cursor
La clusula WHERE CURRENT OF en una
instruccin UPDATE o DELETE

Considere que esta instruccin bloque


todos los registros afectados por
SELECT
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo
Crear un cursor que actualice los
nmeros de crditos actuales que
tiene un estudiante.
El cursor debe ser de actualizacin.

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo
DECLARE
v_NumCreditos sjc_paralelo.num_credits%TYPE;
CURSOR c_Registros IS
SELECT id, current_credits
FROM sjc_estudiantes
WHERE id IN (SELECT id_estudiante
FROM sjc_registros
WHERE id_Paralelo= 102)
FOR UPDATE OF current_credits;
BEGIN
FOR v_Estudiante IN c_Registros LOOP
SELECT num_credits
INTO v_NumCreditos
FROM sjc_paralelo
WHERE id_Paralelo= 102;
UPDATE students
SET current_credits = current_credits + v_NumCreditos
WHERE CURRENT OF c_Registros;
END LOOP;
COMMIT;
END;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Capitulo 9
Excepciones
Tratamiento de Errores

Excepciones
Permiten tratar los errores de manera
inteligente y de recuperarse
Tipos de errores
De compilacin
Compilador informa de los errores y el
programador los corrige

De ejecucin
Motor de ejecucin de PL/SQL, son tratados
en programacin por medio de excepciones

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Declaracin de excepciones

Se declaran en la seccin declarativa


Se generan en la seccin ejecutable
Se controlan en la seccin de excepciones
Hay dos tipos de excepciones
Definidas por el usuario

Son definidas en el programa y


no necesariamente son errores
de Oracle
Predefinidas

No hay que definirlas y


controlan errores de Oracle
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Excepciones predefinidas
Error Oracle

Excepcin

Descripcin

ORA-0001

DUP_VAL_ON_INDEX

Clave duplicada

ORA-1001

INVALID_CURSOR

Operacin ilegal con un cursor

ORA-1012

NOT_LOGGED_ON

No existe conexin con Oracle

ORA_1017

LOGIN_DENIED

Nombre usuario o contrasea no


vlido

ORA_1043

NO_DATA_FOUND

No se ha encontrado ningn dato

ORA_1422

TO_MANY_ROWS

Hay mas de una fila en una


instruccin SELECT..INTO

ORA_1476

ZERO_DIVIDE

Divisin para cero

ORA_1722

INVALID_NUMBER

Fall la conversin a un nmero

ORA_6511

CURSOR_ALREADY_OPEN

Ha intentado abrir un cursor ya


abierto

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Sintaxis de la seccin de excepciones


EXCEPTION
WHEN nombre_excepcin THEN

Secuencia_de_instrucciones1;
WHEN nombre_excepcin THEN

Secuencia_de_instrucciones2;
WHEN OTHERS THEN

Secuencia_de_instrucciones3;
END;
Una misma rutina puede utilizarse para mas de
una excepcin.
EXCEPTION

WHEN no_data_found or
too_many_rows THEN

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Exception OTHERS
Las excepciones predefinidas se
encuentran en el programa
EXCEPTION_INIT
Se generan implcitamente
Si se produce un error que no esta en
esta rutina se puede utilizar
EXCEPTION
WHEN OTHERS THEN
......

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo con ZERO_DIVIDE


DECLARE
x number:=20;
y number:=0;
z number;
BEGIN
z:= x/y;
EXCEPTION
WHEN ZERO_DIVIDE THEN
dbms_output.put_line(Error al intentar
dividir para cero);
END;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo con DUP_VAL_ON_INDEX


Declare
v_IdMat sjc_Materia.id_Materia%TYPE;
BEGIN
v_ IdMat :=100;
insert into sjc_Materia
values(v_IdMat,Fisica,3,20);
EXCEPTION
WHEN dup_Val_on_index THEN
dbms_output.put_line(Error al insertar la
materia. Clave duplicada);
END;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

NO_DATA_FOUND
Se genera cuando una instruccin
SELECT .. INTO no ha encontrado
datos.
No hay que confundir con:
SQL%NOTFOUND
SQL%ROWCOUNT
Ya que estas se evalan en una
sentencia UPDATE o DELETE y no son
excepciones
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo con NO_DATA_FOUND


DECLARE
v_d number;
BEGIN
select empno into v_d from emp where
empno=0;
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('No hay datos');
END;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicio
Crear un bloque PL/SQL que permita
ingresar una nueva materia.
Debe controlar la clave duplicada y
cualquier otro error que ocurra.

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Generacin de excepciones
Son generadas por el usuario con la
instruccin RAISE.
Un ejemplo de seccin generada por
el usuario sera que se este
completando el cupo de cada paralelo

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo
DECLARE
e_TooManyStudents EXCEPTION;
v_CurrentStudents NUMBER(3);
v_MaxStudents NUMBER(3);
v_ErrorCode log_table.code%TYPE;
v_ErrorText log_table.message%TYPE;
BEGIN
SELECT current_students, max_students
INTO v_CurrentStudents, v_MaxStudents
FROM sjc_paralelo
WHERE id_paralelo = 101;
IF v_CurrentStudents > v_MaxStudents THEN
RAISE e_TooManyStudents;
END IF;
EXCEPTION
WHEN e_TooManyStudents THEN
INSERT INTO sjc_log (info)
VALUES (Tiene ' || v_CurrentStudents ||
'students: maximo permitido is ' || v_MaxStudents);
WHEN OTHERS THEN
v_ErrorCode := SQLCODE;
v_ErrorText := SUBSTR(SQLERRM, 1, 200);
INSERT INTO log_table (code, message, info) VALUES (v_ErrorCode, v_ErrorText, Error de
Oracle');
END;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

SQLCODE y SQLERRM
SQLCODE
Devuelve el cdigo del error actual

SQLERRM
Devuelve el texto del mensaje de error

En caso de ser una excepcin definida por


el usuario.
SQLCODE devuelve -1
SQLERRM devuelve User-defined-Exception

La funcin
DBMS_UTILITY.FORMAT_ERROR_STACK
hace lo mismo que SQLERRM
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicio
Generar un bloque PL/SQL que
permita registrar un alumno en un
paralelo. Si ya existe la materia en
otro paralelo y todava hay cupo se
debe registrar en ese paralelo. Casi
contrario crear un nuevo paralelo.
Controlar que no existan paralelos
duplicados, que no se devuelvan mas de
una fila u tros errores posibles.
En la tabla de log ingresar la accin u
error que ha ocurrido.
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Capitulo 10
Procedimientos y funciones
Paquetes

Subprograma
Son creados y almacenados en la
Base de Datos
Se crean con la instruccin CREATE
OR REPLACE
Se almacenan en el diccionario de
datos, con el cdigo fuente y el
compilado
El cdigo compilado tambin se llama
cdigo-p y desde el disco pasa a la
SGA (System Global rea) para su
ejecucin
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Estructura de un subprograma
CREATE OR REPLACE PROCEDURE
nombre [(parametro [IN OUT INT OUT])]
IS
(seccion declarativa)
BEGIN
(lgica del subprograma)
EXCEPTION
(manejo de excepciones)
END nombre;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo Sencillo
CREATE OR REPLACE PROCEDURE
Simple
IS
v_Contador NUMBER;
BEGIN
v_Contador:=7;
END Simple;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo con parmetros %TYPE


CREATE OR REPLACE PROCEDURE
sjc_CurCred (
p_Parameter1 IN OUT VARCHAR2,
p_Parameter2 IN OUT
sjc_estudiante.current_credits%TYPE)
AS
BEGIN
p_Parameter2 := 12345;
END ParameterLength;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejercicio
Crear un procedimiento
Inserte una nueva fila en la tabla de
alumnos.
Utilizar la secuencia de estudiantes para
generar el nuevo id.
Introducir 0 en el campo current_credits.
Controlar los errores que puedan ocurrir.

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo nuevoEstudiante
CREATE OR REPLACE PROCEDURE nuevoEstudiante (
p_FirstName sjc_estudiante.first_name%TYPE,
p_LastName sjc_estudiante.last_name%TYPE,
p_Carrera
sjc_estudiante.carrera%TYPE) AS
BEGIN
INSERT INTO sjc_estudiante (ID, first_name, last_name,
major, current_credits)
VALUES (sjc_seq_estudiante.nextval, p_FirstName, p_LastName,
p_Carrera, 0);
EXCEPTION
WHEN others THEN
dbms_output.put_line(Error al ingresar el estudiante);
END nuevoEstudiante;
/
BEGIN
nuevoEstudiante('Zelda', 'Zudnik', 'Computer Science');
END;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Vistas del diccionario de datos


Una vez creado el procedimiento se
encuentra en las siguientes vistas:
User_objects
Todos los procedimientos validos

User_Source
El cdigo fuente del mismo

User_Errors
El error de compilacin si es que existe.

SHOW ERROR
Es un comando que muestra los errores
que hay sobre los procedimientos
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Tipos de parmetros
IN
(el modo de parmetro por defecto),

IN OUT o OUT,
dependiendo de la naturaleza de la
informacin que va a ser pasada.
Son variables que estn disponibles para
volver a ser asignadas dentro del
subprograma

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

IN
create or replace procedure aumentarSal(pID IN
jc_emp.empno%type)
is
aumento number(5,2) := 1.1;
begin
update jc_emp
set sal=sal*aumento
where empno=pID;
if sql%notfound then
insert into sjc_log values (10,'no existe emp','');
end if;
exception
when others then
insert into sjc_log values(1,'error','');
end aumentarSal;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

out

create or replace procedure consEmp


(pID IN jc_emp.empno%type,
pNombre out jc_emp.ename%type,
psal out jc_Emp.sal%type)
is
begin
select ename, sal
into pNombre,pSal
from jc_emp
where empno=pID;
exception
when no_data_found then
insert into sjc_log values(1,'no exsite empleado','');
when others then
insert into sjc_log values(1,'error','');
end consEmp;
/

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Out 2
declare
vNom varchar2(100);
vSal number(9,2);
begin
consEmp(1,vNom,Vsal);
dbms_output.put_line(vNom || ' ' ||
vsal);
end;
/

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Definicin de procedimientos
Debemos especificar:
Un nombre de rutina
Los parmetros a pasar dentro y fuera de la rutina
PROCEDURE get_order (
in_order_num
IN NUMBER,
out status_code
OUT VARCHAR2,
out_msg
OUT VARCHAR2,
out_merch_total
OUT NUMBER
out_shipping
IN OUT NUMBER,
out_taxes
IN OUT NUMBER,
out_grand_total
OUT NUMBER

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Definicin de funciones
A diferencia de los procedimientos
estas retornan un valor
FUNCTION
Calc_Cargos (
In_merch_total
IN NUMBER
) RETURN NUMBER;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo
Create or replace function sjc_GetSal
(p_Empno IN number) return number
IS
v_Sal number;
begin
select sal into v_Sal FROM emp
WHERE empno=p_Empno;
return v_Sal;
end sjc_GetSal ;
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Capitulo 11
Disparadores de Base de Datos
Triggers

Disparador
Mantienen restricciones de integridad
complejas que no pueden hacerse a
travs de constraints.
Permiten llevar una auditoria de la
informacin contenida en cada tabla
Indican automticamente a otros
programas que es necesario realizar
alguna accin antes de modificar
Publicar informacin sobre diversos
sucesos
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Tipos de disparadores
DML
Se activan a travs de las instrucciones DML de
INSERT, UPDATE o DELETE
Pueden dispararse antes o despus de la operacin
El suceso de disparo especifica una o ms
instrucciones DML
De sustitucin
Oracle 8 y versiones posteriores
Se definen sobre las vistas
De sistemas
Oracle 8i y versiones posteriores
Se activan cuando tienen lugar un suceso del sistema
como la conexin o desconexin de la BD

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo
Suponga que desea llevar un
seguimiento de las estadsticas sobre
las carreras incluido el numero de
alumnos matriculados y el numero
total de crditos
Create table
sjc_Esta_Carrera (
carrera VARCHAR2(30),
total_creditos NUMBER,
total_estud NUMER);
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo
Para mantener actualizada la tabla de
estadsticas de carreras se debe
mantener un disparador sobre la
tabla de estudiantes que actualice
la de estadsticas cada vez que hay
cambios

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo

CREATE OR REPLACE TRIGGER sjc_tg_UpdEstCarrera


AFTER INSERT OR DELETE OR UPDATE ON sjc_estudiante
DECLARE
CURSOR c_Estadistica IS
SELECT carrera, count(id) tot_est,
sum(current_credits) tot_cre
FROM sjc_estudiante
GROUP BY carrera;
BEGIN
DELETE FROM sjc_Esta_Carrera;
FOR v_Estadistica in c_Estadistica LOOP
INSERT INTO sjc_Esta_Carrera VALUES
(v_Estadistica.carrera, v_Estadistica.tot_est,
v_Estadistica.tot_cre);
END LOOP;
END sjc_tg_Upd_Est_Cerrera;

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Creacin de disparadores DML


Un disparador DML se activa con una
operacin INSERT, UPDATE o DELETE
Pueden dispararse antes o despus
de la instruccin
La combinacin de estos factores
determina el tipo de disparador
12 tipos posibles
3 instrucciones * 2 opciones temporales
* 2 niveles (fila o instruccin)
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Orden de activacin de los disparadores


1. Ejecucin de los disparadores previos de
nivel de instruccin
2. Para cada fila afectada por la instruccin
1. Ejecucin de los disparadores previos de nivel
de fila
2. Ejecucin propia de la instruccin
3. Ejecucin de los disparadores posteriores de
nivel de fila

3. Ejecucin de los disparadores de nivel de


instruccin

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplo
TrigOrder

Pkg33.sql

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Insertar automticamente el ID
/* Esto fallar, ya que no hemos especificado la clave primaria */
INSERT INTO sjc_estudiante (first_name, last_name)
VALUES (Darlene', Garcia');
CREATE OR REPLACE TRIGGER GenerarIDEstudiante
BEFORE INSERT OR UPDATE ON sjc_estudiante
FOR EACH ROW
BEGIN
/* Completa el campo ID de estudiante con el prximo valor
que genere la secuencia. Como ID es una columna de
sjc_estudiante, :new.ID es una referencia vlida. */
SELECT sjc_seq_estudiante.NEXTVAL
INTO :new.ID
FROM dual;
END GenerarIDEstudiante;
/
/* Ahora funcionar. */
INSERT INTO sjc_estudiante (first_name, last_name)
VALUES (Darlene', Garcia');
Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Mantener actualizado los datos


CREATE OR REPLACE TRIGGER ActualizarenCascada
/* Mantener sincronizadas las tablas registros, estudiantes y paralelo
cuando se realiza una operacin INSERT sobre sjc_registros */
BEFORE INSERT ON sjc_registro
FOR EACH ROW
DECLARE
v_Credits sjc_registro.num_credits%TYPE;
BEGIN
-- Determinar el nmero de crditos de esta clase.
SELECT num_credits
INTO v_Credits
FROM sjc_paralelo
WHERE id_aula = :new.id_aula
AND course = :new.course;
-- Modificar los crditos actuales de este alumno.
UPDATE sjc_estudiante
SET current_credits = current_credits + v_Credits
WHERE ID = :new.student_id;
-- Incrementar en uno el nmero de alumnos de la clase
UPDATE sjc_paralelo
SET current_students = current_students + 1
WHERE id_aula = :new.id_aula
AND course = :new.course;
Protegido
por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
END
ActualizarenCascada;
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec
/

Ejercicio
Crear una tabla de auditoria en donde
se grabe todas las operaciones sobre
los registros de las tablas de
estudiante, registros, y paralelos
La informacin a guardar es la
siguiente:
Fecha y Hora, Usuario, Tabla,Dato
anterior, Dato actual

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Capitulo 12
Conceptos Avanzados de
Administracin de la BD

Tablas partidas
Permiten aumentar la disponibilidad de
grandes bases de datos
Hace que sean ms fciles de administrar
Sintaxis:
CREATE TABLE schema.table ON schema.table
PARTITION BY RANGE (partition_key)
(PARTITION partition_name VALUES LESS THAN
(column_value)

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Tablas partidas
PARTITION BY RANGE
es la clave de la particin de la tabla.

PARTITION
es el nombre de la particin de la tabla.

VALUES LESS THAN


define el intervalo de particin de la tabla
basado en los valores disponibles para la clave
de la particin.

SELECT * FROM cabFact PARTITION (a1)


Muestra todas las facturas de la particin a1

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

ndices
Se utilizan para aumentar el rendimiento de
la Base de datos
Se necesita el privilegio del sistema create
index para ejecutar este comando
CREATE INDEX schema.index ON
schema.table (COLUMN ASC/DESC)
CLUSTER schema.cluster INITRANS x
MAXTRANS x TABLESPACE name
STORAGE clause PCTFREE x NOSORT

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Parmetros de Create Index

Index

Es obligatorio y es el nombre del ndice.

es una palabra reservada obligatoria.

es un nombre de tabla obligatorio sobre la cual est construido el


ndice.

ON

Table

COLUMN

Es el nombre de columna a indexar. Si hay ms de una columna, es


necesario asegurarse de que estn enumeradas por orden de prioridad.

ASC/DESC

Los ndices se construyen por defecto en orden ascendente.

es necesario solamente si este ndice es para un clster


(agrupamiento).

CLUSTER

INITRANS

Tiene un valor por defecto de 1. Esto es una asignacin del nmero de


entradas de transaccin asignadas dentro del bloque de datos

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Parmetros de Create Index

MAXTRANS

TABLESPACE

Es opcional y tiene caractersticas por defecto definidas por el


DBA.

PCTFREE

Por defecto del nombre del espacio de tablas del propietario


del esquema.

STORAGE

Por defecto una funcin del tamao del bloque. Es utilizado


para identificar el nmero mximo de transacciones
concurrentes que pueden actualizar un bloque de datos para el
ndice.

Por defecto es 10. Esto indica que el 10 por ciento de cada


bloque de datos est reservado para futuras actualizaciones
del ndice.

NOSORT

Es un parmetro opcional que ahorra tiempo cuando se crea el


ndice si los datos de la tabla se encuentran ya clasificados

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Ejemplos de creacin de ndices


Ejemplo 1

CREATE INDEX x_adrs_id ON ADDRESSES (ADRS_ID);


Esto crea un ndice solamente en la columna adrs_id.

CREATE INDEX x_city_state ON ADDRESSES (CITY,


STATE) TABLESPACE application_indexes;
Este ndice tiene dos columnas;
CITY es la columna primaria para la ciudad.
Para las consultas que utilicen un ndice, los nombres de
columna deben formar parte de la instruccin select.
Si una instruccin select incluye el STATE, pero no la
ciudad, CITY, entonces no se utiliza el ndice.
Sin embargo si la instruccin select contiene una
referencia a CITY pero no a STATE, se utiliza parte del
ndice.

Ejemplo 2

Protegido por Ley de propiedad intelectual, prohibida su reproduccin sin autorizacin previa del autor.
Mae. Juan Carlos Garca, MCP; jgarcia@espol.edu.ec

Potrebbero piacerti anche