25/11/07Laboratorio de Bases de Datos1 PL/SQL* *Tomado del curso de Francisco Moreno.

Slides:



Advertisements
Presentaciones similares
¿Cómo hacer los ejercicios prácticos de Access?
Advertisements

While Leonel Morales Díaz Ingeniería Simple Disponible en: Copyright 2008 by Leonel.
Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple Disponible en: Copyright.
Composición de Una Tabla de Números a Partir de Una Lista de Números Separada por Comas en Transact SQL Leonel Morales Díaz Ingeniería Simple
Bases de datos. bases de datos2 Bases de datos Una BD es un conjunto de datos integrados con información de un sistema objeto, con redundancia controlada.
Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título.
Insercion de datos..
Delete en tablas: titulacion. Puedo eliminar cualquier fila de una tabla? Restriccion de integridad: Restrict/Cascade.
MSQL OPERADORES BIT A BIT & a & b Operador de BIT AND. I a l b Operador de BIT OR. < < a >
09/02/2014Curso Bases de Datos1 Ejemplos Álgebra Relacional.
Bases de Datos Espaciales SPATIAL QUERY LANGUAGES
INTEGRIDAD, INTEGRIDAD REFERENCIAL
MATLAB.
Procedimientos Almacenados y Disparadores
Defensa Pública y Derechos Humanos
SQL Base de Datos LENGUAJES DE CONSULTA AR y CR no pueden ser tomados como base para implementar porque: Poseen sintaxis compleja No permiten.
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.
Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Packages –Unidad de compilación que permite la especificación.
Banco de Datos1 Mecanismos de Protección de los Derechos Fundamentales de las personas privadas de libertad.
Oracle y Java Continuación *
01/12/07Seminario de Bases de Datos1 Características Objeto Relacionales en Oracle 10G* * Tomado del curso de Francisco Moreno.
13/01/08Seminario de Bases de Datos1 Oracle y Java * * Tomado del curso de Francisco Moreno.
01/12/07Seminario de Bases de Datos1 Características Objeto Relacionales en Oracle 10G* * Tomado del curso de Francisco Moreno.
11/06/201424/11/06Lab. Bases de Datos1 JSP y Bases de Datos * * Tomado del curso de Francisco Moreno.
ESTRUCTURAS DE CONTROL
Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Tipos definidos por el usuario –Punteros Tipo access:
Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Overloading de subprogramas procedure Put(Item: in integer;
Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Subprogramas –Encabezamiento –Declaraciones –Cuerpo –Encabezamiento.
Seminario de Lenguajes A – Opción Ada Estructura general de programas –Especificación de contexto –Encabezado –Declaraciones –Cuerpo Seminario de Lenguajes.
Seminario de Lenguajes A – Opción Ada
Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Genéricos –Molde a partir del cual se pueden crear instancias.
EL LENGUAJE ESTÁNDAR SQL
DATAWAREHOUSE.
ALGEBRA RELACIONAL.
MODELOS DE DATOS.
MODELO RELACIONAL.
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle
Características Objeto Relacionales en Oracle
PL/SQL Francisco Moreno Universidad Nacional.
BASES DE DATOS Ejercicio No. 6. Ejecutar las siguientes sentencias SELECT nombre, ueldo FROM user.tabla_profesor WHERE filtro 1 UPDATE user.tabla_profesor.
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
Longitud de arco..
UNITA - IBARRA BLOQUES PL-SQL SUBPROGRAMAS Paulina Guevara.
Características Objeto Relacionales en Oracle
PL/SQL Francisco Moreno Universidad Nacional.
4/7/2015Curso Bases de Datos1 MODELO DE OBJETOS SEMÁNTICOS Francisco Moreno.
Características Objeto Relacionales en Oracle 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.
16/04/ Sesión 11 Funciones y procedimientos Ing. Ricardo Inquilla.
PL/SQL Francisco Moreno Universidad Nacional.
PL/SQL Francisco Moreno Universidad Nacional.
Ing. Ricardo Carlos Inquilla Quispe
UNITA - IBARRA TRIGGERS
PL/SQL Francisco Moreno Universidad Nacional.
Base de datos Francisco Castro. Creación de una tabla drop table TABLA cascade constraints; /*==============================================================*/
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
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.
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.
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.
Administración de Sistemas Gestores de Bases de Datos.
PL/SQL Francisco Moreno Universidad Nacional.
SQL: Structured Query Language
Características Objeto Relacionales en Oracle
BASE DE DATOS IUPSM CLASE PRACTICA. PROF. ING. JOSE L GUZMAN H.
SQL: structured Query Language
UN DISPARADOR O TRIGGER es un procedimiento que se ejecuta cuando se cumple una condición establecida al realizar una operación. Es una rutina autónoma.
5. SQL Procedural.
Oracle Pl/SQl Developer – Nivel 1
Características Objeto Relacionales en Oracle
Transcripción de la presentación:

25/11/07Laboratorio de Bases de Datos1 PL/SQL* *Tomado del curso de Francisco Moreno

25/11/07Laboratorio de Bases de Datos2 Funciones Cuando un subprograma posea exactamente un argumento de salida, es mejor crear una función que un procedimiento y así se puede involucrar directamente en expresiones Sintaxis: FUNCTION CREATE [OR REPLACE] FUNCTION nombre_función [ ( arg1 [modo] tipo [, arg2 [modo] tipo...] ) ] RETURN tipo_de_dato IS Bloque de PL/SQL

25/11/07Laboratorio de Bases de Datos3 Ejemplo CREATE OR REPLACE FUNCTION area_circulo (radio IN NUMBER) RETURN NUMBER IS pi CONSTANT NUMBER(5,4) := ; BEGIN RETURN ( radio * radio * pi ); END; / Invocación en SQL*Plus: VAR a NUMBER; EXECUTE :a := area_circulo(3); PRINT a;

25/11/07Laboratorio de Bases de Datos4 Ejercicio: Elaborar una función que devuelva el factorial de un número. n > 0 n*(n-1)! n! = n = 0 1 n < 0 error (-1) - Elaborarlo recursivo - Elaborarlo no recursivo Recursividad

25/11/07Laboratorio de Bases de Datos5 Solución recursiva CREATE OR REPLACE FUNCTION factorialr (n NATURAL) RETURN NUMBER IS BEGIN IF n=0 THEN RETURN 1; ELSE RETURN n*factorialr(n-1); END IF; END; / Rango: 0,1,…2147

25/11/07Laboratorio de Bases de Datos6 Solución iterativa CREATE OR REPLACE FUNCTION factorialnr (n NATURAL) RETURN NUMBER IS fact NUMBER := 1; BEGIN FOR k IN 1..n LOOP fact := fact * k; END LOOP; RETURN fact; END; /

25/11/07Laboratorio de Bases de Datos7 Las funciones se pueden usar en las consultas así: CREATE TABLE numero( num NUMBER(10) PRIMARY KEY); INSERT INTO numero VALUES(1); INSERT INTO numero VALUES(3); SELECT 'El factorial de ' || num || ' es ' || factorialr(num) AS fact FROM numero; Incluso se puede hacer algo como: SELECT 'El factorial de ' ||factorialr(num) || ' es '|| factorialnr(factorialr(num)) AS fact FROM numero;

25/11/07Laboratorio de Bases de Datos8 Paquetes Un paquete es una agrupación de funciones, procedimientos y variables. Clasifican los subprogramas de acuerdo a una categoría elegida por el programador o diseñador Los paquetes se dividen en 2 partes: Especificación Definiciones de vbles públicas y prototipos de los subprogramas Cuerpo ( BODY ) Implementación de los subprogramas descritos en la especificación y vbles privadas

25/11/07Laboratorio de Bases de Datos9 CREATE PACKAGE nom_paquete IS -- Variables públicas -- Declaración de subprogramas END; / BODY CREATE PACKAGE BODY nom_paquete IS -- Variables privadas /* Implementación de subprogramas privados */ /* Implementación de subprogramas declarados en la especificación */ END; / Sintaxis ESPEC IF ICAC IÓN CUERPO Los subprogramas privados deben implementarse antes que los otros

25/11/07Laboratorio de Bases de Datos10 Ejemplo: Creación de la especificación: CREATE OR REPLACE PACKAGE matematico IS FUNCTION factorial(n NATURAL) RETURN NUMBER; FUNCTION dist_puntos( x1 NUMBER, y1 NUMBER, x2 NUMBER, y2 NUMBER) RETURN NUMBER; END; /

25/11/07Laboratorio de Bases de Datos11 Ejemplo: Implementación CREATE OR REPLACE PACKAGE BODY matematico IS FUNCTION fact (n NATURAL) RETURN NUMBER IS BEGIN IF n=0 THEN RETURN 1; ELSE RETURN n*fact(n-1); END IF; END; PROCEDURE error(mensaje VARCHAR) IS BEGIN DBMS_OUTPUT.PUT_LINE(mensaje); END; Continúa Subprogramas privados

25/11/07Laboratorio de Bases de Datos12 Cont. Implementación FUNCTION factorial(n NATURAL) RETURN NUMBER IS BEGIN IF (n>20) THEN error( ' Valor demasiado grande ' ); RETURN -1; ELSE RETURN fact(n); END IF; END; FUNCTION dist_puntos(x1 NUMBER, y1 NUMBER, x2 NUMBER, y2 NUMBER) RETURN NUMBER IS BEGIN RETURN (SQRT(POWER(x2 - x1,2) + POWER(y2 - y1,2) ) ); END; END; --Fin del paquete / Subprogramas Públicos

25/11/07Laboratorio de Bases de Datos13 Para ejecutar: a) VAR a NUMBER; EXECUTE :a := matematico.factorial(3); PRINT a b) EXECUTE :a := matematico.dist_puntos(0,0,1,1); PRINT a c) EXECUTE :a := matematico.factorial(-5); Error d) EXECUTE matematico.error( 'Mensaje'); Error, el subprograma es privado Imprime 6 Imprime …

25/11/07Laboratorio de Bases de Datos14 Ahora se invocará desde un SELECT a la función de distancia entre puntos: Sea la tabla: CREATE TABLE punto( coordx NUMBER(10), coordy NUMBER(10), PRIMARY KEY(coordx, coordy) ); INSERT INTO punto VALUES(0,0); INSERT INTO punto VALUES(1,1); INSERT INTO punto VALUES(0,4);

25/11/07Laboratorio de Bases de Datos15 SELECT 'La distancia del origen a (' || coordx || ',' || coordy || ')' || ' es ' || matematico.dist_puntos(0,0,coordx,coordy) AS distancia FROM punto; ¿Qué hace la siguiente consulta? SELECT p1.coordx p1x,p1.coordy p1y, p2.coordx p2x,p2.coordy p2y, matematico.dist_puntos(p1.coordx,p1.coordy, p2.coordx,p2.coordy) AS distancia FROM punto p1, punto p2 ORDER BY 1,2,3,4; Nota: En versiones anteriores a 9i para poder invocar funciones empaquetadas se requiere especificar el grado de pureza de la función mediante PRAGMA RESTRICT_REFERENCES.

25/11/07Laboratorio de Bases de Datos16 Sobrecarga de Subprogramas dentro de un paquete Es posible tener dentro de un paquete un subprograma declarado varias veces con el mismo nombre pero con diferentes tipos de parámetros No puede haber sobrecarga si los parámetros sólo varían en el modo ( IN, OUT ) No puede haber sobrecarga si ésta se basa exclusivamente en el tipo de retorno de la función Debe haber diferencia entre la familia de los tipos, ejemplo CHAR vs. VARCHAR se consideran iguales

25/11/07Laboratorio de Bases de Datos17 No puede haber sobrecarga entre: PROCEDURE xxx(a VARCHAR ) PROCEDURE yyy(a IN NUMBER ) FUNCTION zzz(a IN NUMBER ) RETURN NUMBER PROCEDURE xxx(b CHAR ) PROCEDURE yyy(b OUT NUMBER ) FUNCTION zzz(b IN NUMBER ) RETURN VARCHAR

25/11/07 Ejemplo CREATE OR REPLACE PACKAGE insercion IS PROCEDURE insertar(n NUMBER); PROCEDURE insertar(cad VARCHAR); END; / Sean las tablas: CREATE TABLE numero(num NUMBER(10)); CREATE TABLE mensaje(texto VARCHAR2(10));

25/11/07Laboratorio de Bases de Datos19 CREATE OR REPLACE PACKAGE BODY insercion IS PROCEDURE insertar(n NUMBER) IS BEGIN INSERT INTO numero VALUES(n); END; PROCEDURE insertar(cad VARCHAR) IS BEGIN INSERT INTO mensaje VALUES(cad); END; / Para Ejecutar: SQL> EXECUTE insercion.insertar('Hola'); SQL> EXECUTE insercion.insertar(8); Invocación

25/11/07Laboratorio de Bases de Datos20 Variables en los Paquetes Las variables en los paquetes son persistentes (durante la sesión) Las variables declaradas en la especificación son públicas, es decir, pueden ser accesadas y modificadas directamente desde otros subprogramas o bloques anónimos Las variables declaradas en el cuerpo son privadas, sólo pueden ser accesadas dentro de éste. Si desean verse desde afuera del cuerpo se debe crear un subprograma (público) a través del cual se accesen (cf. encapsulamiento)

25/11/07Laboratorio de Bases de Datos21 CREATE OR REPLACE PACKAGE vbles IS nro_veces NUMBER(3) := 0; -- Vble pública PROCEDURE incrementa_veces; -- Ver Nota PROCEDURE muestra_veces; -- Ver Nota PROCEDURE muestra_impresiones; -- Requerido END; / Nota: Estos procedimientos no son estrictamente necesarios aunque recomendables ¿por qué? Ejemplo Subprogramas públicos

25/11/07Laboratorio de Bases de Datos22 CREATE OR REPLACE PACKAGE BODY vbles IS nro_impresiones NUMBER(3) :=0; --Variable privada PROCEDURE incrementa_veces IS BEGIN nro_veces := nro_veces + 1; END; PROCEDURE muestra_veces IS BEGIN DBMS_OUTPUT.PUT_LINE(nro_veces); nro_impresiones := nro_impresiones + 1; END; PROCEDURE muestra_impresiones IS BEGIN DBMS_OUTPUT.PUT_LINE(nro_impresiones); END; /

25/11/07Laboratorio de Bases de Datos23 Para ejecutar: EXECUTE vbles.muestra_veces; EXECUTE vbles.muestra_impresiones; EXECUTE vbles.incrementa_veces; EXECUTE vbles.muestra_veces; EXECUTE vbles.muestra_impresiones; De nuevo:

25/11/07Laboratorio de Bases de Datos24 Directamente se pueden accesar las variables públicas pero NO las privadas por ejemplo: BEGIN vbles.nro_veces := vbles.nro_veces +1; END; / BEGIN DBMS_OUTPUT.PUT_LINE(vbles.nro_veces); END; / BEGIN DBMS_OUTPUT.PUT_LINE(vbles.nro_impresiones); END; / Genera error porque nro_impresiones NO es pública