5 Paquetes ORACLE Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.

Slides:



Advertisements
Presentaciones similares
Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
Advertisements

BASE DE DATOS OBJETO RELACIONAL
Implementación de funciones definidas por el usuario
ADA: lenguaje de programación concurrente
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo Introducción a PL/SQL Conceptos básicos.
Metodología de la Programación
PL/SQL Francisco Moreno Universidad Nacional. Funciones Si un procedimiento tiene solo un parámetro de salida, se puede remplazar por una función y esta.
Presentación Asignatura POF030 Semana 1. Contenido En forma general, los conceptos que se estudiarán en la asignatura son: – Procedures – Functions –
EXCEPCIÓN DE ERRORES.
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
UNITA - IBARRA BLOQUES PL-SQL SUBPROGRAMAS Paulina Guevara.
Características Objeto Relacionales en Oracle
PL/SQL Francisco Moreno Universidad Nacional.
PL/SQL Francisco Moreno Universidad Nacional. Introducción al PL/SQL ¿Por qué PL/SQL? A pesar de que SQL tiene mecanismos de control condicional (cláusula.
Bases de Datos Relacionales
16/04/ Sesión 11 Funciones y procedimientos Ing. Ricardo Inquilla.
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
PL/SQL Francisco Moreno Universidad Nacional.
PL/SQL Francisco Moreno Universidad Nacional.
Subconsultas Avanzadas
Ing. Ricardo Carlos Inquilla Quispe
UNITA - IBARRA TRIGGERS
John Freddy Duitama M.U.de.A. Facultad de Ingeniería. Creación del esquema de Una Base de Datos. John Freddy Duitama Muñoz. Facultad de Ingeniería. U.de.A.
PL/SQL Francisco Moreno Universidad Nacional.
Práctica: Sistema de control de ventas y almacenaje para grandes almacenes 03/12/11.
PL/SQL Francisco Moreno Universidad Nacional.
TRIGGERS EN ORACLE 8 J. Iriarte S. España
Control de errores visual basic
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo Ciclo de vida y operaciones masivas Conceptos básicos.
Ada 2º Parte (variables, ámbitos , subrutinas , tipos abstractos de datos y excepciones)
"Inserción de una red social en videoschistosos.net“ Rodrigo Braga Roberto.
Características Objeto Relacionales en Oracle
Características Objeto-Relacionales en Oracle Francisco Moreno Universidad Nacional.
Estructura general de un programa en el servidor de Bases de Datos.
Base de datos Francisco Castro. Creación de una tabla drop table TABLA cascade constraints; /*==============================================================*/
PUESTO-TRABAJO (Código-Puesto, Empresa, Sueldo, DNI- Contratado) TITULADO (DNI-Titulado, Nombre, Apellidos, Dirección) TITULACION (Iden-Titulación, Nombre,
Estructuras de Control
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo Uso de Procedimiento y Funciones Conceptos básicos.
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo SQL en PL/SQL Conceptos básicos.
Ada 2º Parte (variables, ámbitos, subrutinas, tipos abstractos de datos y excepciones)
Algorítmica y Programación
AA Gerardo Morgade Donato AA Isnel Leyva Herbella.
Después de completar esta lección, debe ser capaz de:  Crear registro definidos por el usuario.  Crear un registro con el atributo %ROWTYPE.  Crear.
Base de Datos I – Ing. Mary Carlota Bernal J. BASE DE DATOS I PL/SQL.
Apuntes PL-SQL Triggers II. Tipos de datos compuestos Registros PL/SQL: Son similares a un tipo struct en C o a un tipo Registro en otros 3GL. Se componen.
Estándares y buenas prácticas de SQL. Cuando trabajamos con SQL o bien cuando tenemos la necesidad de crear procedures (utilizando pl/sql), es recomendable.
6 Triggers ORACLE - II Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
3 Cursores ORACLE Bases de datos II I-2014 Universidad del Cauca In. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca In. Wilson Ortega.
Mtr. Adrián Monge Monge Educación 2015 Maestría, Mención en Administración de Proyectos ULACITMaestría, Mención en Administración de Proyectos 2012 Licenciatura,
Bases de datos II Universidad del Cauca Ing. Wilson Ortega.
DLM Transact SQL Sesión II Recuperación de información.
Base de Datos I – Ing. Mary Carlota Bernal J.  Cada instrucción PL/SQL tiene asociado internamente un cursor  Los cursores en PL/SQL pueden ser de dos.
4 Excepciones ORACLE Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
Implementación de funciones definidas por el usuario.
Diapositivas PLSQL ORACLE – Semana 2 Especialización en Desarrollo de soluciones Informáticas Universidad del Cauca Miguel Ángel Niño Zambrano.
6 Triggers ORACLE Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
6 Copyright © 2004, Oracle. Todos los derechos reservados. Trabajar con Tipos de Dato Compuestos.
6 Triggers ORACLE - III Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
Prof. Jonathan Silva Ingeniería Civil – Informática I Ingeniería Civil Informática I Clase 7 – Funciones y Procedimientos.
Introducción a la Programación Orientada a Objetos (POO) Conceptos de clase, objeto e interfaz. Atributos y métodos Fundamentos de Programación Departamento.
DAI - Ing. Arturo Rozas Huacho Tablas Cruzadas Sistemas de Base de Datos Para entender el concepto de tablas cruzadas, veamos el siguiente ejemplo:
GESTOR DE BASE DE DATOS CARRERA: COMPUTACIÓN E INFORMÁTICA CURSO: TALLER DE SISTEMAS I DOCENTE: ING. JOSÉ EDUARDO QUISPE TAIPE CICLO: QUINTO.
Características Objeto Relacionales en Oracle
BASE DE DATOS IUPSM CLASE PRACTICA. PROF. ING. JOSE L GUZMAN H.
Oracle Pl/SQl Developer – Nivel 1
Características Objeto Relacionales en Oracle
Transcripción de la presentación:

5 Paquetes ORACLE Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega

1-2 Introducción Un paquete es un objeto de un esquema que agrupa lógicamente tipos, variables y subprogramas.Un paquete es un objeto de un esquema que agrupa lógicamente tipos, variables y subprogramas. Usualmente los paquetes tienen dos partes:Usualmente los paquetes tienen dos partes: Una especificación Cuerpo; algunas veces el cuerpo no es necesario. Un paquete es un objeto de un esquema que agrupa lógicamente tipos, variables y subprogramas.Un paquete es un objeto de un esquema que agrupa lógicamente tipos, variables y subprogramas. Usualmente los paquetes tienen dos partes:Usualmente los paquetes tienen dos partes: Una especificación Cuerpo; algunas veces el cuerpo no es necesario.

1-3 Introduccion(2) La especificación es la interfaz del paquete. Declara tipos, variables, constantes, excepciones, cursores y subprogramas que pueden ser llamados desde fuera.La especificación es la interfaz del paquete. Declara tipos, variables, constantes, excepciones, cursores y subprogramas que pueden ser llamados desde fuera. El cuerpo define las consultas para el cursor y el código para los subprogramas.El cuerpo define las consultas para el cursor y el código para los subprogramas. La especificación es la interfaz del paquete. Declara tipos, variables, constantes, excepciones, cursores y subprogramas que pueden ser llamados desde fuera.La especificación es la interfaz del paquete. Declara tipos, variables, constantes, excepciones, cursores y subprogramas que pueden ser llamados desde fuera. El cuerpo define las consultas para el cursor y el código para los subprogramas.El cuerpo define las consultas para el cursor y el código para los subprogramas.

1-4 Contenido de un paquete Metodos GET y SET para variables en caso de que no se desee que desde fuera del paquete se lea y escriba en ellas directamente.Metodos GET y SET para variables en caso de que no se desee que desde fuera del paquete se lea y escriba en ellas directamente. Declaraciones de cursores para reusar.Declaraciones de cursores para reusar. Declaración de excepcionesDeclaración de excepciones Declaración de subprogramasDeclaración de subprogramas Declaración de subprogramas sobrecargados (mismo nombre, distintos parámetros).Declaración de subprogramas sobrecargados (mismo nombre, distintos parámetros). Variables globalesVariables globales Declaraciones de tipos compuestos. Esto permitirá usarlos como parámetros de subprogramas.Declaraciones de tipos compuestos. Esto permitirá usarlos como parámetros de subprogramas. Metodos GET y SET para variables en caso de que no se desee que desde fuera del paquete se lea y escriba en ellas directamente.Metodos GET y SET para variables en caso de que no se desee que desde fuera del paquete se lea y escriba en ellas directamente. Declaraciones de cursores para reusar.Declaraciones de cursores para reusar. Declaración de excepcionesDeclaración de excepciones Declaración de subprogramasDeclaración de subprogramas Declaración de subprogramas sobrecargados (mismo nombre, distintos parámetros).Declaración de subprogramas sobrecargados (mismo nombre, distintos parámetros). Variables globalesVariables globales Declaraciones de tipos compuestos. Esto permitirá usarlos como parámetros de subprogramas.Declaraciones de tipos compuestos. Esto permitirá usarlos como parámetros de subprogramas.

1-5 Ventajas de los paquetes ModularidadModularidad División por funcionalidades comunes Facilidad en el diseño de aplicacionesFacilidad en el diseño de aplicaciones Definir primero la interfaz EncapsulamientoEncapsulamiento Se ocultan detalles de implementación Datos en sesiónDatos en sesión Variables y cursores Mejor rendimientoMejor rendimiento Se cargan en memoria en la primera ejecución ModularidadModularidad División por funcionalidades comunes Facilidad en el diseño de aplicacionesFacilidad en el diseño de aplicaciones Definir primero la interfaz EncapsulamientoEncapsulamiento Se ocultan detalles de implementación Datos en sesiónDatos en sesión Variables y cursores Mejor rendimientoMejor rendimiento Se cargan en memoria en la primera ejecución

1-6 Especificación del paquete La especificación del paquete contiene las declaraciones públicasLa especificación del paquete contiene las declaraciones públicas Accesibles desde el paquete o desde subprogramas del mismo esquema Si no se declaran cursores o subprogramas no es necesario crear el cuerpo del paquete.Si no se declaran cursores o subprogramas no es necesario crear el cuerpo del paquete. La especificación del paquete contiene las declaraciones públicasLa especificación del paquete contiene las declaraciones públicas Accesibles desde el paquete o desde subprogramas del mismo esquema Si no se declaran cursores o subprogramas no es necesario crear el cuerpo del paquete.Si no se declaran cursores o subprogramas no es necesario crear el cuerpo del paquete. CREATE PACKAGE [OR REPLACE] nombre_paquete AS - variables - tipos - excepciones END; CREATE PACKAGE [OR REPLACE] nombre_paquete AS - variables - tipos - excepciones END;

1-7 Especificación del paquete EjemploEjemplo CREATE OR REPLACE PACKAGE EST_COMUN AS TYPE reg_est_prom IS RECORD ( nombre ESTUDIANTE.codigo%TYPE, promedio ESTUDIANTE.promedio%TYPE ); nota_min_beca ESTUDIANTE.promedio%TYPE; PROMEDIO_BAJO_BECA exception; END; CREATE OR REPLACE PACKAGE EST_COMUN AS TYPE reg_est_prom IS RECORD ( nombre ESTUDIANTE.codigo%TYPE, promedio ESTUDIANTE.promedio%TYPE ); nota_min_beca ESTUDIANTE.promedio%TYPE; PROMEDIO_BAJO_BECA exception; END; Usar el paquete: BEGIN EST_COMUN.nota_min_beca := 4; DBMS_OUTPUT.PUT_LINE('Nota mínima para beca: ' || EST_COMUN.nota_min_beca); END ; BEGIN EST_COMUN.nota_min_beca := 4; DBMS_OUTPUT.PUT_LINE('Nota mínima para beca: ' || EST_COMUN.nota_min_beca); END ;

1-8 Cuerpo del paquete Contiene la implementación de cada cursor y subprograma definido en la especificaciónContiene la implementación de cada cursor y subprograma definido en la especificación Un subprograma definido en el cuerpo es accesible desde el exterior solamente si su definición aparece en la especificación del paqueteUn subprograma definido en el cuerpo es accesible desde el exterior solamente si su definición aparece en la especificación del paquete El cuerpo se debe definir en el mismo esquema que su especificaciónEl cuerpo se debe definir en el mismo esquema que su especificación La especificación y la implementación de los subprogramas debe coincidir palabra a palabraLa especificación y la implementación de los subprogramas debe coincidir palabra a palabra Se pueden definir variables en el cuerpo. En este caso sólo serán visibles internamente.Se pueden definir variables en el cuerpo. En este caso sólo serán visibles internamente. Contiene la implementación de cada cursor y subprograma definido en la especificaciónContiene la implementación de cada cursor y subprograma definido en la especificación Un subprograma definido en el cuerpo es accesible desde el exterior solamente si su definición aparece en la especificación del paqueteUn subprograma definido en el cuerpo es accesible desde el exterior solamente si su definición aparece en la especificación del paquete El cuerpo se debe definir en el mismo esquema que su especificaciónEl cuerpo se debe definir en el mismo esquema que su especificación La especificación y la implementación de los subprogramas debe coincidir palabra a palabraLa especificación y la implementación de los subprogramas debe coincidir palabra a palabra Se pueden definir variables en el cuerpo. En este caso sólo serán visibles internamente.Se pueden definir variables en el cuerpo. En este caso sólo serán visibles internamente. CREATE PACKAGE BODY nombre_paquete AS - variables internas - implementación de subprogramas END; CREATE PACKAGE BODY nombre_paquete AS - variables internas - implementación de subprogramas END;

1-9 Cuerpo del paquete Ejemplo (Especificación del paquete) CREATE OR REPLACE PACKAGE EST_COMUN AS TYPE reg_est_prom IS RECORD ( nombre ESTUDIANTE.codigo%TYPE, promedio ESTUDIANTE.promedio%TYPE ); nota_min_beca ESTUDIANTE.promedio%TYPE; PROMEDIO_BAJO_BECA exception; FUNCTION ObtenerPromedio(p_cod ESTUDIANTE.codigo%TYPE) RETURN ESTUDIANTE.promedio%TYPE; PROCEDURE ActualizarPromedio(p_cod ESTUDIANTE.codigo%TYPE, p_nuevo_prom ESTUDIANTE.promedio%TYPE); END; CREATE OR REPLACE PACKAGE EST_COMUN AS TYPE reg_est_prom IS RECORD ( nombre ESTUDIANTE.codigo%TYPE, promedio ESTUDIANTE.promedio%TYPE ); nota_min_beca ESTUDIANTE.promedio%TYPE; PROMEDIO_BAJO_BECA exception; FUNCTION ObtenerPromedio(p_cod ESTUDIANTE.codigo%TYPE) RETURN ESTUDIANTE.promedio%TYPE; PROCEDURE ActualizarPromedio(p_cod ESTUDIANTE.codigo%TYPE, p_nuevo_prom ESTUDIANTE.promedio%TYPE); END;

1-10 Cuerpo del paquete Ejemplo (Implementación del cuerpo) CREATE OR REPLACE PACKAGE BODY EST_COMUN AS FUNCTION ObtenerPromedio(p_cod ESTUDIANTE.codigo%TYPE) RETURN ESTUDIANTE.promedio%TYPE IS v_prom ESTUDIANTE.promedio%TYPE := 0; BEGIN SELECT promedio INTO v_prom FROM ESTUDIANTE WHERE codigo = p_cod; RETURN v_prom; EXCEPTION WHEN OTHERS THEN RETURN NULL; END; PROCEDURE ActualizarPromedio(p_cod ESTUDIANTE.codigo%TYPE, p_nuevo_prom ESTUDIANTE.promedio%TYPE) IS BEGIN UPDATE ESTUDIANTE SET promedio = p_nuevo_prom WHERE codigo = p_cod; END; CREATE OR REPLACE PACKAGE BODY EST_COMUN AS FUNCTION ObtenerPromedio(p_cod ESTUDIANTE.codigo%TYPE) RETURN ESTUDIANTE.promedio%TYPE IS v_prom ESTUDIANTE.promedio%TYPE := 0; BEGIN SELECT promedio INTO v_prom FROM ESTUDIANTE WHERE codigo = p_cod; RETURN v_prom; EXCEPTION WHEN OTHERS THEN RETURN NULL; END; PROCEDURE ActualizarPromedio(p_cod ESTUDIANTE.codigo%TYPE, p_nuevo_prom ESTUDIANTE.promedio%TYPE) IS BEGIN UPDATE ESTUDIANTE SET promedio = p_nuevo_prom WHERE codigo = p_cod; END;

1-11 Uso del paquete EjemploEjemplo S ET SERVEROUTPUT ON; DECLARE v_cod ESTUDIANTE.codigo%TYPE := 23; BEGIN DBMS_OUTPUT.PUT_LINE('Promedio del estudiante ' || v_cod || ' : ' || EST_COMUN.ObtenerPromedio(v_cod)); END ; S ET SERVEROUTPUT ON; DECLARE v_cod ESTUDIANTE.codigo%TYPE := 23; BEGIN DBMS_OUTPUT.PUT_LINE('Promedio del estudiante ' || v_cod || ' : ' || EST_COMUN.ObtenerPromedio(v_cod)); END ; Promedio del estudiante 23 : 2,1

1-12 Usando cursores en paquetes En la especificación del paquete se define el nombre y tipo de retorno del cursor.En la especificación del paquete se define el nombre y tipo de retorno del cursor. En el cuerpo se define la sentencia SELECT y el tipo de retorno (debe coincidir con la especificación).En el cuerpo se define la sentencia SELECT y el tipo de retorno (debe coincidir con la especificación). El uso de cursores en paquetes incrementa la flexibilidad pues es posible cambiar el select y la definición se mantendrá igual.El uso de cursores en paquetes incrementa la flexibilidad pues es posible cambiar el select y la definición se mantendrá igual. En la especificación del paquete se define el nombre y tipo de retorno del cursor.En la especificación del paquete se define el nombre y tipo de retorno del cursor. En el cuerpo se define la sentencia SELECT y el tipo de retorno (debe coincidir con la especificación).En el cuerpo se define la sentencia SELECT y el tipo de retorno (debe coincidir con la especificación). El uso de cursores en paquetes incrementa la flexibilidad pues es posible cambiar el select y la definición se mantendrá igual.El uso de cursores en paquetes incrementa la flexibilidad pues es posible cambiar el select y la definición se mantendrá igual.

1-13 Usando cursores en paquetes Ejemplo (Especificación) CREATE OR REPLACE PACKAGE EST_COMUN AS TYPE reg_est_prom IS RECORD ( nombre ESTUDIANTE.codigo%TYPE, promedio ESTUDIANTE.promedio%TYPE ); nota_min_beca ESTUDIANTE.promedio%TYPE; PROMEDIO_BAJO_BECA exception; FUNCTION ObtenerPromedio(p_cod ESTUDIANTE.codigo%TYPE) RETURN ESTUDIANTE.promedio%TYPE; PROCEDURE ActualizarPromedio(p_cod ESTUDIANTE.codigo%TYPE, p_nuevo_prom ESTUDIANTE.promedio%TYPE); CURSOR cur_est_pro RETURN ESTUDIANTE%ROWTYPE; END; CREATE OR REPLACE PACKAGE EST_COMUN AS TYPE reg_est_prom IS RECORD ( nombre ESTUDIANTE.codigo%TYPE, promedio ESTUDIANTE.promedio%TYPE ); nota_min_beca ESTUDIANTE.promedio%TYPE; PROMEDIO_BAJO_BECA exception; FUNCTION ObtenerPromedio(p_cod ESTUDIANTE.codigo%TYPE) RETURN ESTUDIANTE.promedio%TYPE; PROCEDURE ActualizarPromedio(p_cod ESTUDIANTE.codigo%TYPE, p_nuevo_prom ESTUDIANTE.promedio%TYPE); CURSOR cur_est_pro RETURN ESTUDIANTE%ROWTYPE; END;

1-14 Usando cursores en paquetes Ejemplo (Cuerpo) CREATE OR REPLACE PACKAGE BODY EST_COMUN AS CURSOR cur_est_pro RETURN ESTUDIANTE%ROWTYPE IS SELECT * FROM ESTUDIANTE WHERE programa_id = 1; -- Implementación de los subprogramas -- END; CREATE OR REPLACE PACKAGE BODY EST_COMUN AS CURSOR cur_est_pro RETURN ESTUDIANTE%ROWTYPE IS SELECT * FROM ESTUDIANTE WHERE programa_id = 1; -- Implementación de los subprogramas -- END;

1-15 Uso del cursor EjemploEjemplo SET SERVEROUTPUT ON; DECLARE v_pro ESTUDIANTE.programa_id%TYPE := 1; BEGIN FOR reg_est IN EST_COMUN.cur_est_pro LOOP DBMS_OUTPUT.PUT_LINE('Nombre: '||reg_est.nombre ||' - Promedio: '|| reg_est.promedio); END LOOP; END ; SET SERVEROUTPUT ON; DECLARE v_pro ESTUDIANTE.programa_id%TYPE := 1; BEGIN FOR reg_est IN EST_COMUN.cur_est_pro LOOP DBMS_OUTPUT.PUT_LINE('Nombre: '||reg_est.nombre ||' - Promedio: '|| reg_est.promedio); END LOOP; END ; Nombre: Juan - Promedio: 2,1 Nombre: Sara - Promedio: 4 Nombre: Pedro - Promedio: 3,4 Nombre: Juan - Promedio: 2,1 Nombre: Sara - Promedio: 4 Nombre: Pedro - Promedio: 3,4

1-16 Ejercicio Cree un paquete para la gestión de programas académicos llamado PRO_GESTION que implemente:.Cree un paquete para la gestión de programas académicos llamado PRO_GESTION que implemente:. Un cursor para todos los programas con fecha de creación menor a 01/01/2000. Una función que retorne el número de estudiantes de un programa determinado. Se recibe como parámetro el programa_Id. Un procedimiento que guarde en una tabla anidad pública del paquete Nombre y Fecha de creación de todos los programas. Cree un paquete para la gestión de programas académicos llamado PRO_GESTION que implemente:.Cree un paquete para la gestión de programas académicos llamado PRO_GESTION que implemente:. Un cursor para todos los programas con fecha de creación menor a 01/01/2000. Una función que retorne el número de estudiantes de un programa determinado. Se recibe como parámetro el programa_Id. Un procedimiento que guarde en una tabla anidad pública del paquete Nombre y Fecha de creación de todos los programas.

1-17 Bibliografía Oracle® Database PL/SQL Language Reference -11g Release 1 (11.1) Oracle® Database PL/SQL Language Reference -11g Release 1 (11.1)