Vous êtes sur la page 1sur 20

23/07/2016

Generalidades

Objetivos

Duracin

Implementacin de bases de datos


Oracle 11g

Construir y manipular bases de datos bases de datos en


Oracle 11g
Programar procedimientos, funciones y paquetes con el
lenguaje PL-SQL
5 horas acadmicas

Ing. Martn Leiva Castillo


mleivac@unprg.edu.pe

Herramientas

Oracle Database 11g Express


Oracle SQL Developer

Contenido

Parte I

Introduccin a Oracle 11g

Parte II
Construccin de bases de datos

Parte III

Programacin de bases de datos

23/07/2016

OnLine Transaction Processing (OLTP)

Introduccin a Oracle 11g

Proceso en el cual dada una transaccin es procesada


inmediatamente en los sistemas de procesamiento
Las bases de datos OLTP se caracterizan por ser altamente
normalizadas para soportar el procesamiento masivo de
transacciones
No estn estructuradas para soportar anlisis de datos
histricos
Bases de datos transaccionales

Parte I

On Line Analitycal Processing (OLAP)

Proceso interactivo de crear, mantener, analizar y elaborar


informes sobre datos
Los datos son percibidos y manejados como si estuvieran
almacenados en una estructura multidimensional
Las base de datos OLAP proveen de respuestas rpidas a
consultas empresariales complejas

INSERT
UPDATE
DELETE

Qu es Oracle Databases?

Carga de datos

Bases de datos transaccionales

INSERT
UPDATE
DELETE

SELECT

Almacn de datos

SELECT

Oracle Databases es un sistema de gestin de bases de datos


relacionales (RDBMS) que implementa caractersticas
orientadas a objetos
Soporta tipos definidos por el usuario, herencia y
polimorfismo, por lo que tambin considerado como un
Sistema Administrador de Base de Datos Relacional-Objeto
(ORDBMS)
Oracle Database ha extendido el modelo relacional a un
modelo relacional-objeto, haciendo posible almacenar modelos
de negocio complejos en una base de datos relacional

SELECT

23/07/2016

Oracle Database 11g Express Edition

Oracle Database Server

Consiste en una base de datos y en al menos una instancia de


base de datos
Base de datos

Instancia de base de datos

Conjunto de archivos, en disco, que almacenan datos


Los archivos existen independientemente de la instancia
Son estructuras de memoria que gestionan los archivos de base
de datos
Esta compuesta por un rea de memoria compartida (SGA) y un
conjunto de procesos llamados backgroud process (procesos de
base)

La instancia puede ser iniciada y detenida, la base de datos


persiste indefinidamente

http://www.oracle.com/technetwork/database/database-technologies/expressedition/downloads/index.html

Oracle Database
Server

Instancia
System Global Area (SGA)
Database Writer (DBWn)

Database Buffer Cache


Redo Log Buffer

Shared Pool

Base de datos

Log Writer (LGWR)

Library Cache

Checkpoint (CKPT)

Dictionary Cache

System Monitor (SMON)

Data Files
Control Files
Redo Log

Process Monitor (PMON)


Large Pool
Java Pool

Archiver (ARCn)

Program Global Area (PGA)

23/07/2016

Instancia

Estructuras de memoria

Base de datos

Espacio de tablas
System

Espacio de tablas
USERS

Procesos en segundo plano


Espacio de tablas
SYSAUX

Base de datos
Estructura fsica de la
base de datos

Archivos de
datos

Archivos de
control

Archivos del
registro rehacer

Segmento

Archivos del
registro de
rehacer
archivados

Extensin 1

Espacio de tablas
Segmento 1

Segmento 4

Segmento 2

Segmento 5

Segmento 3

Segmento 6

Extensin 2

SQL
Lenguaje utilizado para manipular bases de datos relacionales

Categora de instrucciones:

Lenguaje de manipulacin de datos (DML)


INSERT, UPDATE, DELETE, SELECT

Lenguaje de definicin de datos (DDL)

CREATE, ALTER, DROP, RENAME, TRUNCATE

Lenguaje de control de transacciones

Lenguaje de control de datos (DCL)

Archivo de
datos 3

Archivo de
datos 4

Estructura lgica de
la base de datos

Espacio de tablas
System

Espacio de tablas
USERS

Espacio de tablas
SYSAUX

SQL*Plus

Archivo de
datos 2

Base de datos
Bloques

Archivo de
datos 1

Herramienta de lnea de comandos para ejecutar comandos


SQL y PL/SQL
Permite realizar las siguientes operaciones:

Escribir, editar y ejecutar comandos SQL y bloques PL/SQL


Dar formato a los resultados de las consultas
Visualizar las estructuras de las tablas y copiar datos entre bases de
datos

COMMIT, ROLLBACK, SAVEPOINT

GRANT, REVOKE

23/07/2016

SQL*Plus

Herramienta de lnea de comandos para ejecutar comandos


SQL y PL/SQL

Conexin y desconexin

Ejecucin del programa como administrador


sqlplus / as sysdba
SQL> _

Creacin de usuario
SQL> CREATE USER martin IDENTIFIED BY 123456;

Asignacin de permiso para iniciar sesin


SQL> GRANT CREATE SESSION TO martin;

Cmo salir de SQL*Plus


SQL> exit

Conexin y desconexin

Probamos conexin
sqlplus martin/123456

Qu es PL/SQL?

Ejecutamos consulta:
SQL> SELECT Taller de Oracle FROM dual;

Consultamos la versin:
SQL> SELECT * FROM v$version;

Lenguaje procedimental de Oracle


Es una extensin de SQL
Soporta DDL, DML y DCL
Ventajas

Integracin de SQL
Procesamiento procedimental
Funcionalidades suplementarias
Mejora del rendimiento
Integracin de los productos Oracle

Cambiar password
SQL> password

23/07/2016

Tipos de datos principales

NUMBER
CHAR
VARCHAR2
NCHAR
NVARCHAR2
DATE
TIMESTAMP

BINARY_FLOAT
BINARY_DOUBLE
ROWID
CLOB
NCLOB
BFILE
BLOB

Objetos de datos y Esquemas

Un objeto de datos es una estructura lgica que puede ser una


tabla, un archivos de ndice o un archivo temporal
En una base de datos pueden existir otros objetos que no
contienen datos como las vistas y las secuencias
Todo objeto independientemente si contiene datos o no debe
pertenecer a un esquema
Cada usuario es propietario de un solo esquema, que tiene el
mismo nombre de usuario
Dentro de un esquema cada objeto de un tipo particular tiene
un nombre nico

Usuarios SYS y SYSTEM

Toda base de datos Oracle tiene siempre estos dos usuarios


Se crean automticamente cuando se instala Oracle
Sirven para gestionar la base de datos
Son los propietarios del diccionario de datos de la base de
datos

Objetos de base de datos

Tablas
Restricciones
Secuencias
Procedimientos almacenados
Funciones
Desencadenadores

23/07/2016

Conexin con Oracle SQL Developer

Sentencias bsicas

Creamos una tabla


CREATE TABLE Cliente
( codigo_Cli number NOT NULL ,
nombre_Cli varchar2(100) NOT NULL ) ;

Consultamos la tabla

Listamos las columnas de la tabla:

SELECT * FROM Cliente;


DESCRIBE Cliente;
DESC Cliente;

Eliminamos la tabla

Tabla dual

DROP TABLE Cliente;

SELECT 47 * 3.46 FROM dual;

Creacin de usuarios y asignacin de


privilegios

Creamos el usuario empresa


CREATE USER empresa IDENTIFIED BY 123456
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP QUOTA UNLIMITED ON USERS;

Asignamos privilegios:
GRANT create session TO empresa;
GRANT create table TO empresa;

Construccin de bases de datos

GRANT create sequence TO empresa;


GRANT create procedure, create trigger, create view TO empresa;

Parte II

Quitamos privilegios:
REVOKE create view FROM empresa;

23/07/2016

Configurando password

Modificamos password:

Restricciones

ALTER USER empresa IDENTIFIED BY 12345678;

Exigimos cambio de password:

Restriccin

ALTER USER empresa PASSWORD EXPIRE;

Eliminamos usuario:
DROP USER empresa;
DROP USER empresa CASCADE;

Creacin de tablas

Creamos la tabla Proyecto

Creamos sus restricciones:

Descripcin

NOT NULL

Especifica que una columna no puede contener nulos

UNIQUE

Especificado para una columna o combinacin de columnas


cuyos valores deben ser nicos para todas las filas de la tabla

PRIMARY KEY

Identifica de manera nica cada fila de una tabla

FOREIGN KEY

Establece e impone una relacin entre una o ms columnas de


la tabla y una o ms columnas de la tabla referenciada

CHECK

Especifica una condicin que se debe cumplir

Creacin de la tabla Departamento

Creamos la tabla:
CREATE TABLE Departamento
(
numero_Dep number(2) NOT NULL ,
nombre_Dep char(25) NOT NULL ,
fechaIniGer_Dep date,
numeroEmp_Dep number(3) DEFAULT 0 NOT NULL ,
nss_Emp char(9)
);

CREATE TABLE Proyecto


(
numero_Pro number(4) NOT NULL ,
nombre_Pro char(35) NOT NULL ,
lugar_Pro char(15) NOT NULL ,
estado_Pro char (1) DEFAULT 'E' NOT NULL ,
numero_Dep number(2) NOT NULL
);

Conjunto de reglas que pueden definirse sobre una o ms


columnas de una tabla para ayudar a imponer las reglas del
negocio
Tipos:

Creamos sus restricciones:

ALTER TABLE Proyecto


ADD CONSTRAINT PK_Proyecto PRIMARY KEY ( numero_Pro ) ;

ALTER TABLE Departamento


ADD CONSTRAINT PK_Departamento PRIMARY KEY ( numero_Dep ) ;

ALTER TABLE Proyecto


ADD CONSTRAINT UQ_Proyecto_nombre UNIQUE ( nombre_Pro ) ;

ALTER TABLE Departamento


ADD CONSTRAINT UQ_Departamento_nombre UNIQUE ( nombre_Dep ) ;

ALTER TABLE Proyecto


ADD CONSTRAINT CK_Proyecto_estado CHECK (estado_Pro IN ('T','S','E'));

ALTER TABLE Departamento


ADD CONSTRAINT UQ_Departamento_nss UNIQUE ( nss_Emp ) ;

23/07/2016

Restricciones de integridad referencial

Crear tablas en Empresa

Eliminamos las tablas Proyecto y Departamento

Abrir en Oracle SQL Developer el archivo 1.creaTablasEmpresa

Ejecutar script

ALTER TABLE Proyecto


ADD CONSTRAINT FK_Proyecto_Departamento
FOREIGN KEY
(
numero_Dep
)
REFERENCES Departamento
(
numero_Dep
);

Secuencias

Asigna nmeros secuenciales que se garantiza que son


unvocos
Pueden generar valores de hasta 28 cifras
La serie de nmeros puede ser ascendente o descendente
El intervalo puede ser cualquier valor
Oracle puede almacenar bloques de nmeros en cach a partir
de una secuencia contenida en memoria, para incrementar
todava la velocidad
Se garantiza que son unvocos, aunque no necesariamente
secuenciales

Creacin de secuencias

Creamos la secuencia:
CREATE SEQUENCE numero_Pro START WITH 1 INCREMENT BY 1;

Utilizamos la secuencia:
INSERT INTO Departamento(numero_Dep, nombre_Dep)
VALUES (1, 'Investigacin');

INSERT INTO Proyecto(numero_Pro, nombre_Pro, lugar_Pro, estado_Pro, numero_Dep)


VALUES (numero_Pro.nextval, 'ProductoX', 'Chepen', 'E', 1);
INSERT INTO Proyecto(numero_Pro, nombre_Pro, lugar_Pro, estado_Pro, numero_Dep)
VALUES (numero_Pro.nextval, 'ProductoY', 'Pacasmayo', 'S', 1);
SELECT * FROM Proyecto;

Eliminamos la secuencia
DROP SEQUENCE numero_Pro ;

23/07/2016

Crear secuencias en Empresa

Abrir en Oracle SQL Developer el archivo 2.creaSecuenciasEmpresa

Ejecutar script

Qu es una transaccin?

Fragmento de cdigo PL/SQL, que incluye operaciones de


acceso a la base de datos
Propiedades:

Ejecucin de una transaccin

Una transaccin es un conjunto de sentencias DML que deben ser


atmicas, consistentes, aisladas y permanentes
Inicio de transaccin

Cuando no hay una transaccin en progreso y se ejecuta una


sentencia DML
No existe sentencia de inicio de transaccin

Fin de transaccin

COMMIT

Finaliza la transaccin actual y hace permanentes los cambios realizados

ROLLBACK

Finaliza la transaccin actual y deshace los cambios realizados

Atomicidad
Conservacin de la consistencia
Aislamiento
Durabilidad o permanencia

Ejemplo de una transaccin


SELECT * FROM Dependiente WHERE nss_emp='000342102';
DELETE FROM Dependiente WHERE nss_emp='000342102';
SELECT * FROM Dependiente WHERE nss_emp='000342102';
ROLLBACK;
SELECT * FROM Dependiente WHERE nss_emp='000342102';
DELETE FROM Dependiente WHERE nss_emp='000342102';
SELECT * FROM Dependiente WHERE nss_emp='000342102';
COMMIT;
SELECT * FROM Dependiente WHERE nss_emp='000342102';

10

23/07/2016

Llenar tablas en Empresa

Eliminamos las filas de Departamento y Proyecto

Abrir en Oracle SQL Developer el archivo 3.llenaTablasEmpresa

Ejecutar script

Programacin de bases de datos


Parte III

Base de datos Empresa

11

23/07/2016

Qu es un procedimiento almacenado?

Es un bloque de cdigo PL/SQL nominado, almacenado en la


base de dato y se puede ejecutar desde aplicaciones u otros
procedimientos almacenados
Para hacer referencia se puede utilizar la instruccin
EXECUTE
Sintaxis:
CREATE [OR REPLACE] PROCEDURE nombre_procedimiento

Procedimientos almacenados

[(parmetros)]
IS
[ Variables]
BEGIN
Bloque PL/SQL
END;

Qu es un procedimiento almacenado?

Para ejecutar un procedimiento:

Procedimiento para eliminar

Dado el nmero de seguro social del empleado y el nmero


de dependiente eliminarlo

EXECUTE nombre_procedimiento [(parmetro, )]

Eliminar un procedimiento:
DROP PROCEDURE nombre_procedimiento

CREATE OR REPLACE PROCEDURE pa_eliminarDependiente(


v_nssEmp dependiente.nss_Emp%TYPE,
v_numero dependiente.numero_Depe%TYPE)
IS
BEGIN
DELETE FROM Dependiente
WHERE nss_Emp=v_nssEmp AND numero_Depe=v_numero;
SELECT
* FROM Dependiente WHERE nss_Emp='123456789';
COMMIT;
END;

12

23/07/2016

Procedimiento para eliminar

Ejecutamos el procedimiento
SELECT * FROM Dependiente WHERE nss_Emp='123456789';
EXECUTE pa_eliminarDependiente('123456789',3);

Verificamos la eliminacin
SELECT * FROM Dependiente WHERE nss_Emp='123456789';

Procedimiento para insertar

Insertar un nuevo proyecto

CREATE OR REPLACE PROCEDURE pa_insertarProyecto(


v_nombre proyecto.nombre_Pro%TYPE,
v_numeroDep proyecto.numero_Dep%TYPE,
v_lugar proyecto.lugar_Pro%TYPE)
IS
BEGIN
INSERT INTO Proyecto(numero_Pro, nombre_Pro, numero_Dep, lugar_Pro)
VALUES (numero_Pro.nextval, v_nombre, v_numeroDep, v_lugar);
COMMIT;
END;

Eliminamos el procedimiento
DROP PROCEDURE pa_eliminarDependiente;

Procedimiento para insertar

Probamos el procedimiento
EXEC pa_insertarProyecto('Desarrollo de Sistema Contable', 5, 'Pacasmayo');

Verificamos el registro
SELECT * FROM Proyecto;

Ejercicio 1

Retirar un empleado de un proyecto, siempre y cuando


no sea el nico asignado al proyecto

CREATE OR REPLACE PROCEDURE pa_desasignarProyecto(


v_nss trabaja.nss_Emp%TYPE,
v_numero trabaja.numero_Pro%TYPE)
IS
sin_empleados EXCEPTION;
cuenta NUMBER;
BEGIN
SELECT COUNT(*) INTO cuenta FROM Trabaja WHERE numero_Pro=v_numero;
IF cuenta=1 THEN
RAISE sin_empleados;
END IF;
DELETE FROM Trabaja WHERE numero_Pro=v_numero AND nss_Emp=v_nss;
COMMIT;
EXCEPTION
WHEN sin_empleados THEN RAISE_APPLICATION_ERROR(-20999, 'Tiene un slo
empleado');
END;

13

23/07/2016

Probando el procedimiento

Consultar el proyecto 12

Ejercicio 2

SELECT * FROM Trabaja WHERE numero_Pro=12;

Ejecutamos el procedimiento:
EXEC pa_desasignarProyecto('425984153', 12);
SELECT * FROM Trabaja WHERE numero_Pro=12;

Consultar el proyecto 11:


SELECT * FROM Trabaja WHERE numero_Pro=11;

Ejecutamos el procedimiento:
EXEC pa_desasignarProyecto('014685006',11);
SELECT * FROM Trabaja WHERE numero_Pro=11 ;

Probando el procedimiento

Consultar al empleado con nss 090000002


SELECT * FROM Trabaja WHERE nss_Emp='090000002';

Ejecutamos el procedimiento, asignando 20 horas:

Ejecutamos el procedimiento, asignando 14.5 horas:

EXEC pa_asignarProyecto('090000002', 12, 20);

EXEC pa_asignarProyecto('090000002', 12, 14.5);

Verificamos:
SELECT * FROM Trabaja WHERE nss_Emp='090000002';

Asignar un empleado de un proyecto, sabiendo que no debe


exceder el total de 40 horas semanales asignados a proyectos

CREATE OR REPLACE PROCEDURE pa_asignarProyecto(


v_nss trabaja.nss_Emp%TYPE,
v_numero trabaja.numero_Pro%TYPE,
v_horas trabaja.horasSem_Tra%TYPE)
IS
exceso_horas EXCEPTION;
suma NUMBER;
BEGIN
SELECT SUM(horasSem_Tra) INTO suma FROM Trabaja WHERE nss_Emp=v_nss;
suma := suma + v_horas;
IF suma>40 THEN
RAISE exceso_horas;
END IF;
INSERT INTO Trabaja(numero_Pro, nss_Emp, horasSem_Tra) VALUES(v_numero, v_nss,v_horas);
COMMIT;
EXCEPTION
WHEN exceso_horas THEN RAISE_APPLICATION_ERROR(-20999, 'No debe superar las 40 horas
semanales');
END;

Ejercicio 3

Insertar un departamento, en donde el procedimiento genere


el nmero del nuevo departamento

CREATE OR REPLACE PROCEDURE pa_insertarDepartamento(


v_nombre departamento.nombre_Dep%TYPE,
v_nss departamento.nss_Emp%TYPE,
v_fecha departamento.fechaIniGer_Dep%TYPE,
v_numero OUT departamento.numero_Dep%TYPE)
IS
BEGIN
SELECT MAX(numero_Dep)+1 INTO v_numero FROM Departamento;
IF v_nss IS NULL THEN
INSERT INTO Departamento(numero_Dep, nombre_Dep)
VALUES(v_numero, v_nombre);
ELSE
INSERT INTO Departamento(numero_Dep,nombre_Dep,nss_Emp,fechaIniGer_Dep,numeroEmp_Dep)
VALUES(v_numero, v_nombre, v_nss, v_fecha, 1);
UPDATE Empleado SET numero_Dep=v_numero WHERE nss_Emp=v_nss;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS THEN rollback;
END;

14

23/07/2016

Probando el procedimiento

Agregando un nuevo departamento, sin gerente

variable c1 number;
EXECUTE pa_insertarDepartamento('Seguridad Industrial', null, null, :c1);
print c1;

Verificamos:

Agregando un nuevo departamento, asignando gerente

SELECT * FROM Departamento;

Funciones almacenadas

variable c1 number;
EXECUTE pa_insertarDepartamento('Control de calidad', '090000002', sysdate, :c1);
print c1;

Verificamos:
SELECT * FROM Departamento;
SELECT * FROM Empleado WHERE nss_emp='090000002';

Qu es una funcin almacenada?

Una funcin es un fragmento de cdigo PL/SQL, pero la


funcin devuelve un valor
Sintaxis:

Qu es una funcin almacenada?

Ejecutando funciones:
SELECT nombre_funcin[(parmetro, )] FROM dual

CREATE [OR REPLACE] FUNCTION nombre_funcin

variable := nombre_funcin[(parmetro, )]

[(parmetros)]
RETURN tipo

IS
Variables

Eliminando funciones:
DROP FUNCTION nombre_funcin

BEGIN
Bloque PL/SQL
END;

15

23/07/2016

Funciones: ejemplo 1

Implementar una funcin que devuelva el nmero de


empleados de acuerdo a un estado especfico

Funciones: ejemplo 1

Probamos el procedimiento
SELECT f_numeroEmpleados('C') FROM dual;

CREATE OR REPLACE FUNCTION f_numeroEmpleados(


v_estado empleado.estado_Emp%TYPE)
RETURN number
IS
numero number;
BEGIN
SELECT COUNT(*) INTO numero
FROM empleado
WHERE estado_Emp=v_estado;

SELECT f_numeroEmpleados('A') FROM dual;


SELECT f_numeroEmpleados('V') FROM dual;
SELECT f_numeroEmpleados('N') FROM dual;

RETURN numero;
END;

Funciones: ejemplo 2

Implementar una funcin que devuelva los departamentos


mostrando el nmero de empleados de sexo masculino y
femenino

CREATE OR REPLACE FUNCTION f_numeroEmpleadoDepSexo(


v_numeroDep empleado.numero_Dep%TYPE,
v_sexo empleado.sexo_Emp%TYPE)
RETURN number
IS
numero number;
BEGIN
SELECT COUNT(*) INTO numero
FROM empleado
WHERE numero_Dep=v_numeroDep AND sexo_Emp=v_sexo
AND estado_Emp IN ('A','V');

Funciones: ejemplo 2

Probando la funcin

SELECT numero_Dep, nombre_Dep,


f_numeroempleadodepsexo(numero_Dep,1) as Masculino,
f_numeroempleadodepsexo(numero_Dep,0) as Femenino
FROM Departamento;

RETURN numero;
END;

16

23/07/2016

Qu es un paquete?

Agrupa de forma lgica elementos PL/SQL relacionados


Se dividen en dos partes:

Ventajas:

Paquetes

Cabecera del paquete

Permite describir el contenido del paquete y conocer el


nombre y los parmetros de llamada de las funciones y
procedimientos
Sintaxis:
CREATE [OR REPLACE] PACKAGE nombre_paquete
AS
--Definicin de tipos
--Declaracin de variables pblicas
--Prototipos de los cursores pblicos
--Prototipos de los procedimientos y funciones pblicos
END [nombre_paquete];

Una cabecera o especificacin


Un cuerpo
Modularidad
Simplificacin de desarrollo
Ocultar datos
Adicin de funcionalidades
Mejora de rendimiento

Ejemplo de cabecera
CREATE OR REPLACE PACKAGE pq_Proyecto
AS
PROCEDURE pa_insertarProyecto(
nombre proyecto.nombre_Pro%TYPE,
lugar proyecto.lugar_Pro%TYPE,
numeroDep proyecto.numero_Dep%TYPE);
PROCEDURE pa_eliminarProyecto(numero proyecto.numero_Pro%TYPE);
PROCEDURE pa_modificarProyecto(
numero proyecto.numero_Pro%TYPE,
nombre proyecto.nombre_Pro%TYPE,
lugar proyecto.lugar_Pro%TYPE,
estado proyecto.estado_Pro%TYPE,
numeroDep proyecto.numero_Dep%TYPE);
END pq_Proyecto;

17

23/07/2016

Cuerpo del paquete

Contiene la implementacin de los procedimientos y funciones


descritos en la cabecera
Tambin contiene definiciones de tipos y declaraciones de
variables cuyo mbito est limitado al cuerpo del paquete
Sintaxis:
CREATE [OR REPLACE] PACKAGE BODY nombre_paquete
AS
--Definicin de tipos locales al paquete
--Declaracin de variables locales al paquete
--Implementacin de los cursores pblicos
--Cuerpo de los procedimientos y funciones locales al paquete
--Cuerpo de los procedimientos y funciones pblicas
END [nombre_paquete];

Ejemplo de cuerpo de paquete


CREATE OR REPLACE PACKAGE BODY pq_Proyecto
AS
PROCEDURE pa_insertarProyecto(nombre proyecto.nombre_Pro%TYPE, lugar proyecto.lugar_Pro%TYPE,
numeroDep proyecto.numero_Dep%TYPE)
IS
BEGIN
INSERT INTO Proyecto(numero_Pro,nombre_Pro,lugar_Pro,numero_Dep)
VALUES (numero_Pro.nextval, nombre, lugar, numeroDep);
commit;
END pa_insertarProyecto;
PROCEDURE pa_eliminarProyecto(numero proyecto.numero_Pro%TYPE)
IS
BEGIN
DELETE FROM Proyecto WHERE numero_Pro=numero;
commit;
END pa_eliminarProyecto;
PROCEDURE pa_modificarProyecto(numero proyecto.numero_Pro%TYPE, nombre proyecto.nombre_Pro%TYPE,
lugar proyecto.lugar_Pro%TYPE, estado proyecto.estado_Pro%TYPE, numeroDep proyecto.numero_Dep%TYPE)
IS
BEGIN
UPDATE Proyecto SET nombre_Pro=nombre, lugar_Pro=lugar, numero_Dep=numeroDep,estado_Pro=estado
WHERE numero_Pro=numero;
commit;
END pa_modificarProyecto;
END pq_Proyecto;

Ejecucin de los procedimientos

Se debe indicar el nombre del paquete

EXECUTE pq_Proyecto.pa_insertarProyecto('Mantenimiento', 'Chepen', 6);


SELECT * FROM Proyecto;
EXECUTE pq_Proyecto.pa_modificarProyecto(18, 'Mantenimiento', 'Pacasmayo', 'T', 4);
SELECT * FROM Proyecto;

EXECUTE pq_Proyecto.pa_eliminarProyecto(18);

Procedimientos que devuelven


consultas

SELECT * FROM Proyecto;

18

23/07/2016

Tipo REF CURSOR

Las variables de tipo CURSOR son referencias a cursores


Son punteros a un rea de trabajo donde Oracle almacena los
datos que resultan de una seleccin de mltiples registros
Estos punteros almacenan la direccin de memoria del objeto
apuntado y por lo tanto pueden pasarse como parmetros de
entrada/salida entre procedimientos almacenados o funciones
Declaracin:

Listar empleados por estado

Cabecera del paquete


CREATE OR REPLACE PACKAGE pq_Empleado
AS
TYPE vCursor IS REF CURSOR;
PROCEDURE pa_listarEmpleadosXEstado(
v_estado empleado.estado_Emp%TYPE,
v_cursor OUT vCursor);
END pq_Empleado;

TYPE t_cursor IS REF CURSOR;


res t_cursor;

Listar empleados por estado

Cuerpo del paquete


CREATE OR REPLACE PACKAGE BODY pq_Empleado
AS
PROCEDURE pa_listarEmpleadosXEstado(
v_estado empleado.estado_Emp%TYPE,
v_cursor OUT vCursor)
IS
BEGIN
OPEN v_cursor FOR
SELECT nss_Emp,apellidoPat_Emp,apellidoMat_Emp,nombre_Emp,
inicial_Emp,fechaIng_Emp
FROM Empleado WHERE estado_Emp=v_estado
ORDER BY apellidoPat_Emp, apellidoMat_Emp, nombre_Emp;
END pa_listarEmpleadosXEstado;

Probar procedimiento
variable c1 refcursor;
execute paq_empleado.pa_listarEmpleadosXEstado('A', :c1);
print c1;
variable c1 refcursor;
execute paq_empleado.pa_listarEmpleadosXEstado('C', :c1);
print c1;
variable c1 refcursor;
execute paq_empleado.pa_listarEmpleadosXEstado('V', :c1);
print c1;
variable c1 refcursor;
execute paq_empleado.pa_listarEmpleadosXEstado('M', :c1);
print c1;

END pq_Empleado;

19

23/07/2016

Recomendaciones

Practicar!
Comprender la arquitectura de Oracle
Desarrollar una aplicacin que se
conecte a una base de datos Oracle
Administracin de base de datos
Oracle

20

Vous aimerez peut-être aussi