UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING. MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIÓN PROFESIONAL DE INGENIERIA DE SISTEMAS
I. OBJETIV OBJ ETIVOS OS
•
II.
Entender el concepto de programación con PL/SQL. Crear e invocar procedimientos almacenados en una base de datos Oracle. Utilizar los procedimientos almacenados para facilitar consultas en SQL Developer
MARCO TEÓRICO Programación con PL/SQL
Introducción SQL es un lenguaje de consulta para los sistemas de bases de datos relaciónales, pero que no posee la potencia de los lenguajes de programación. No permite el uso de variables, estructuras de control de flujo, bucles, etc. y demás elementos característicos de la programación. No es de extrañar, SQL es un lenguaje de consulta, no un lenguaje de programación. PL/SQL PL/SQL es el lenguaje de programación que proporciona Oracle para extender el SQL estándar con otro tipo de instrucciones y elementos propios de los lenguajes de programación. Es el lenguaje de programación de 4ta generación para base de datos Oracle.
Bloques PL/SQL Un programa de PL/SQL está compuesto por bloques. Un programa está compuesto como mínimo de un bloque. Los bloques de PL/SQL pueden ser de los siguientes tipos: Lab. Administración de Base de Datos (IS-443)
1
Prof. Elvira Fernández
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING. MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIÓN PROFESIONAL DE INGENIERIA DE SISTEMAS • •
Bloques anónimos Subprogramas
anónimo es básicamente aquel que el código fuente reside en el Un código anónimo es lado cliente y un subprograma subprograma reside reside el código fuente en el servidor. Con PL/SQL vamos a poder programar Los Subprogramas de la base de datos ORACLE, están son: Procedimientos almacenados Funciones Triggers Paquetes
Estructura de un Bloque Los bloques PL/SQL presentan una estructura específica compuesta de tres partes bien diferenciadas: •
•
•
declarativa en donde se declaran todas las constantes y La sección declarativa variables que se van a utilizar en la ejecución del bloque. ejecución que incluye las instrucciones a ejecutar en el La sección de ejecución que bloque PL/SQL. excepciones en donde se definen los manejadores de La sección de excepciones errores que soportará el bloque PL/SQL.
Lab. Administración de Base de Datos (IS-443)
2
Prof. Elvira Fernández
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING. MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIÓN PROFESIONAL DE INGENIERIA DE SISTEMAS
PROCEDIMIENTOS ALMACENADOS Un procedimiento almacenado es un bloque de instrucciones SQL con un nombre determinado. determinado. Un procedimiento almacenado es un procedimiento cuyo código se guarda en la base de datos y tiene como objeto realizar una acción específica. PL/SQL proporciona un lenguaje sofisticado para construir procedimientos, se comportan igualmente, como los procedimientos en otros lenguajes de tercera generación, compartiendo muchas de sus propiedades.
III.
DESARROLLO CREAR UN PROCEDIMIENTO ALMACENADO EN UNA BASE DE DATOS ORACLE
La sintaxis para crear un procedimiento almacenado depende si van a recibir o no parámetros: CREAR PROCEDIMIENTOS ALMACENADO SIN PARÁMETROS CREATE PROCEDURE PROCEDURE Nombre_procedimiento AS/IS BEGIN Instrucciones SQL; END;
Si el nombre del procedimiento almacenado que desea crear ya existe, se visualiza el siguiente mensaje de error.
Para evitar este tipo de errores almacenado con la siguiente sintaxis
puede
crear
el
procedimiento
CREATE [OR CREATE [ OR REPLACE] PROCEDURE PROCEDURE Nombre_procedimiento IS/AS IS/AS BEGIN Instrucciones SQL; END;
EJECUTAR PROCEDIMIENTOS ALMACENADO SIN PARÁMETROS BEGIN Nombre_procedimiento_almacenado(); END;
ENTRADA Y SALIDA DE DATOS Para mostrar un valor por pantalla: Lab. Administración de Base de Datos (IS-443)
3
Prof. Elvira Fernández
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING. MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIÓN PROFESIONAL DE INGENIERIA DE SISTEMAS
DBMS_OUTPUT.PUT_LINE(cadena); DBMS_OUTPUT es un depurador de Oracle que sirve para visualizar cualquier cosa, pero antes lo debemos tener activado (en SQL*plus, se activa con el comando SET SERVEROUTPUT ON):
EJEMPLO 01.- Cree un procedimiento almacenado que permita mostrar los datos generales generales del empleado empleado y el salario salario que percibe, cuyo cuyo código es 198 de la tabla empleados.
EJECUTANDO EL RESULTADO: BEGIN BUSCAR_EMPLEADOS(); END;
%type Este atributo se utiliza para definir las variables del mismo tipo que está definido el campo de una tabla teniendo como ventaja que si se Lab. Administración de Base de Datos (IS-443)
4
Prof. Elvira Fernández
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING. MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIÓN PROFESIONAL DE INGENIERIA DE SISTEMAS
cambia el tipo del campo, se cambia en forma automática el tipo de la variable. Sintaxis Variable tabla.Campo% Type
El
código
de
ALL_SOURCE.
un
procedimiento
se
puede
verificar
en
la
vista
EJEMPLO:
SQL> Select text from all_source where name = BUSCAR_EMPLEADOS;
Entonces la vista ALL_SOURCE tiene 5 campos: CAMPOS DESCRIPCION OWNER Propietario de la función f unción o procedimiento. TYPE Los diferentes tipos de subprogramas. Realmente,
LINE TEXT
aparte de funciones y procedimientos, se puede observar el código de los diferentes tipos: PACKAGE, PACKAGE BODY, PROCEDURE, TYPE, TYPE BODY Número de la línea del código contenido de código que está en la presente línea
CREAR PROCEDIMIEN PROCEDIMIENTOS TOS ALMACENADO AL MACENADO CON PARÁMETROS P ARÁMETROS CREATE [ OR REPLACE] [IN|OUT|IN OUT ] , PROCEDURE [( [ [IN|OUT|IN OUT ] , [ IS
...)]
-- Declaracion de variables locales BEGIN
-- Sentencias [EXCEPTION ] -- Sentencias control de excepcion END [ ];
La cláusula opcional OR REPLACE permite sobrescribir un procedimiento existente. Si se omite y el procedimiento ya existe se producirá un error.
Argumento es el nombre de un parámetro del procedimiento. Los parámetros válidos incluyen todos los tipos de datos. Sin embargo, para los tipos CHAR,VARCHAR2 Y NUMBER no deben de especificar longitud ni escala. escala . Por ejemplo, el parámetro NUMBER(6) da un error de compilación y debe ser reemplazado por NUMBER.
Lab. Administración de Base de Datos (IS-443)
5
Prof. Elvira Fernández
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING. MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIÓN PROFESIONAL DE INGENIERIA DE SISTEMAS
Las cláusulas IN, OUT, y IN OUT especifican el modo en que es utilizado el parámetro. Por defecto, los parámetros son de modo IN. IN significa que el parámetro puede estar referenciado dentro del cuerpo del procedimiento, pero no puede ser cambiado. OUT significa que al parámetro se le puede asignar un valor, pero el valor del parámetro no puede ser referenciado. IN OUT permite ambas cosas, asignar valores a los parámetros y referenciarlos. Normalmente basta con usar el modo por defecto (IN).
ELIMINAR PROCEDIMIENTO Un procedimiento puede ser borrado respectivamente con los comandos
DROP PROCEDURE
Ejemplo 02: Del ejemplo anterior BUSCAR_EM BUSCAR_EMPLEADOS, PLEADOS, modificar y crear un procedimiento almacenado con parámetro, es decir que muestre el empleado según su código especificado.
ACCESO A UN BASE DE DATOS El acceso a la información de una base de datos mediante instrucciones PL/SQL se realiza mediante cursores. Un cursor es una zona de memoria que se reserva para procesar los resultados de una consulta select. La información en un cursor se devuelve y maneja como un conjunto de registros. Existen dos tipos de cursores: Lab. Administración de Base de Datos (IS-443)
6
Prof. Elvira Fernández
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING. MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIÓN PROFESIONAL DE INGENIERIA DE SISTEMAS
Cursores implícitos Cursores explícitos
Cursores implícitos Este tipo de cursor es generado y gestionado por el mismo Oracle y se utiliza para operaciones Select into . Su característica principal es que solo devuelve un registro.
Cursores explícitos Este tipo de cursor es generado y gestionado por el mismo programador y puede devolver N registros.
La sintaxis para declarar un cursor es la siguiente: Cursor nombre Is instrucción SQL Leer todos los registros del cursor Para leer todos los registros de un cursor debe crear un bucle utilizando la instrucción For In.
LA INSTRUCCIÓN For In cumple con las siguientes funciones en un cursor: 1. 2. 3. 4.
Declara una variable para manejar el cursor. Abre el cursor Lee todos los datos del cursor registro por registro. Cierra el cursor
La sintaxis es la siguiente: For Variable In Cursor Loop End Loop; Donde: Variable Es una variable que se declara en forma automática de tipo cursor y almacena los datos leídos del cursor para poder manejarlos manejarlos dentro del bucle.
Cursor Es el nombre del cursor declarado anteriormente.
Ejemplo03. Crear un procedimiento almacenado que permita mostrar los datos de los empleados y su respectiv respectivo o salario. Para ello utilizar cursores.
Lab. Administración de Base de Datos (IS-443)
7
Prof. Elvira Fernández
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING. MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIÓN PROFESIONAL DE INGENIERIA DE SISTEMAS
Ejecutando el procedimiento almacenado. begin BUSCAR_EMPLEADOS(); end; salida:
EJERCICIOS PROPUESTOS Lab. Administración de Base de Datos (IS-443)
8
Prof. Elvira Fernández
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING. MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIÓN PROFESIONAL DE INGENIERIA DE SISTEMAS
Ejercio01: Crear un procedimiento almacenado en el esquema oe, que genere la lista de productos de la tabla PRODUCT_INFORMATION. Mostrar el código_producto, nombre del producto, lista de precios y el minimo precio, según el código del producto ingresad0 .
Salida
Esquema hr
Ejercicio 02 : Crear un procedimiento almacenado que permita mostrar el directorio de un empleado, es decir su nombre, apellidos en una sola fila, su telefono y el nombre del departamento al que pertenece. Buscar al empleado por codigo.
Salida:
Ejercicio 03:
Crear un procedimiento que permita agregar nuevas ocupaciones a la tabla Jobs y luego mostrar los registros agregados.
Ejercicio 04:
Crear un procedimiento procedimiento almacenado almacenado que que permita actualizar actualizar los emails de los empleados según su codigo, con el domino corporat corporativo ivo ejemplo :
[email protected]. juan@unsch .edu.pe. Después Después invocar tal procedimiento.
Ejercicio 05:
crear un procedimiento almacenado localizaciones, según la ciudad indicada. Lab. Administración de Base de Datos (IS-443)
9
que
permita
borrar
las
Prof. Elvira Fernández
UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA FACULTAD DE ING. MINAS, GELOGIA Y CIVIL ESCUELA DE FORMACIÓN PROFESIONAL DE INGENIERIA DE SISTEMAS
Ejercicio 06:
Crear un procedimiento almacenado que permita aumentar los salarios máximo y minimo en un porcentaje indicado, según la ocupación que corresponda.
EJERCICIO 07: Crear un procedimiento almacenado para mostrar los empleados con sus respectivas ocupaciones , departamentos y salarios.
tarea para casa Crear 3 procedimiento almacenados. 1 procedimeinto que reciba paremetros y 2 utilizando cursores(una sin parametros y otro que reciba parámetros) trabajar con el esquema HR.
Lab. Administración de Base de Datos (IS-443)
10
Prof. Elvira Fernández