18
1 UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA ESCUELA DE COMPUTACION CICLO 2-2018 GUIA DE LABORATORIO Nº10 Nombre de la practica: Implementación de Procedimientos Almacenados I. Objetivos Qué el estudiante: 1. Implementar la programación con comandos SQL 2. Validar la información que se utilizará en la Base de datos por medio de procedimientos almacenados. II. Introducción Teórica PROCEDIMIENTOS ALMACENADOS Transact-SQL no es realmente un lenguaje de programación similar a las herramientas de tercera y cuarta generación sin embargo permite utilizar SQL para realizar tareas complejas que requieren saltos, bucles, decisiones. Transact-SQL se utiliza a menudo en la creación de procedimientos almacenados y triggers (desencadenadores) de tal forma que las aplicaciones clientes que se conectan a SQL Server solo se preocupan por la presentación de los datos para el usuario final, mientras que la lógica de los procesos se maneja en el servidor. El control de flujo en Transact-SQL INSTRUCCIÓN DESCRIPCIÓN IF…ELSE Define una decisión. GOTO etiqueta Define un salto incondicional WAITFOR Establece un tiempo para la ejecución de una instrucción. El tiempo puede ser un intervalo de retardo o un instante especificado de ejecución (una hora concreta del día) WHILE Bucle básico de SQL BREAK Acompaña al bucle WHILE y le indica finalizarlo inmediatamente. CONTINUE Acompaña al bucle WHILE y le indica continuar con la siguiente iteración. RETURN [n] Salida incondicional del procedimiento o proceso por lotes, se puede definir un número entero como estado devuelto y puede asignarse a cualquier variable. BEGIN...END Utilizado en conjunto con IF..ELSE o WHILE para agrupar un conjunto de instrucciones. CASE Implementada en la instrucción SELECT y UPDATE y permite realizar consultas y actualizaciones condicionales. PRINT Es una instrucción que se utiliza para imprimir un dato en la pantalla, la sintaxis es: PRINT "cadena"; cadena puede ser también una variable de tipo varchar. Por ejemplo: PRINT ‘Hola a todos’

UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA …...Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor

  • Upload
    others

  • View
    31

  • Download
    1

Embed Size (px)

Citation preview

Page 1: UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA …...Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor

1

UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA

ESCUELA DE COMPUTACION

CICLO 2-2018 GUIA DE LABORATORIO Nº10

Nombre de la practica: Implementación de Procedimientos Almacenados

I. Objetivos

Qué el estudiante:

1. Implementar la programación con comandos SQL

2. Validar la información que se utilizará en la Base de datos por medio de procedimientos almacenados.

II. Introducción Teórica

PROCEDIMIENTOS ALMACENADOS Transact-SQL no es realmente un lenguaje de programación similar a las herramientas de tercera y cuarta generación sin embargo permite utilizar SQL para realizar tareas complejas que requieren saltos, bucles, decisiones. Transact-SQL se utiliza a menudo en la creación de procedimientos almacenados y triggers (desencadenadores) de tal forma que las aplicaciones clientes que se conectan a SQL Server solo se preocupan por la presentación de los datos para el usuario final, mientras que la lógica de los procesos se maneja en el servidor. El control de flujo en Transact-SQL

INSTRUCCIÓN DESCRIPCIÓN

IF…ELSE Define una decisión.

GOTO etiqueta Define un salto incondicional

WAITFOR Establece un tiempo para la ejecución de una instrucción. El tiempo puede ser un intervalo de retardo o un instante especificado de ejecución (una hora concreta del día)

WHILE Bucle básico de SQL

BREAK Acompaña al bucle WHILE y le indica finalizarlo inmediatamente.

CONTINUE Acompaña al bucle WHILE y le indica continuar con la siguiente iteración.

RETURN [n] Salida incondicional del procedimiento o proceso por lotes, se puede definir un número entero como estado devuelto y puede asignarse a cualquier variable.

BEGIN...END Utilizado en conjunto con IF..ELSE o WHILE para agrupar un conjunto de instrucciones.

CASE Implementada en la instrucción SELECT y UPDATE y permite realizar consultas y actualizaciones condicionales.

PRINT Es una instrucción que se utiliza para imprimir un dato en la pantalla, la sintaxis es: PRINT "cadena"; cadena puede ser también una variable de tipo varchar. Por ejemplo: PRINT ‘Hola a todos’

Page 2: UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA …...Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor

2

Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor. Los procedimientos almacenados de SQL Server, son más potentes, porque permiten almacenar funciones y procedimientos compuestos por varias instrucciones, introducir saltos, bucles, etc. Creación de procedimientos almacenados (Store Procedures) La instrucción general para crear procedimientos almacenados es la siguiente: CREATE PROC nombre_proc parametros AS INSTRUCCION SQL Es necesario aclarar, que un procedimiento almacenado puede recibir parámetros de entrada y devolver parámetros de salida. Por ejemplo, podemos crear un procedimiento para recuperar el nombre de un cliente (), cuyo código se pasa por parámetro. CREATE PROCEDURE ObtenerNombre @cliente_id nchar(5) AS SELECT ContactName FROM Customers WHERE CustomerID = @cliente_id Con esta sentencia, se crea un procedimiento almacenado, de nombre ObtenerNombre, al que se le pasa un parámetro, llamado @cliente_id, de tipo nchar tamaño 5, que realiza una consulta para obtener el nombre del cliente de la tabla Customers, cuyo código (CustomerID) coincida con el parámetro. De esta forma, si queremos obtener el nombre del Cliente cuyo código sea 'ALFKI', deberemos ejecutar el procedimiento pasándole como argumento este valor. Las llamadas a procedimientos almacenados se pueden realizar de las siguientes formas:

Pasando los argumentos en el mismo orden que en el que se han declarado.

EXEC ObtenerNombre 'ALFKI'

Pasando los argumentos nombrados. En este caso no hace falta que los parámetros vayan en el mismo orden.

EXEC ObtenerNombre @cliente_id='ALFKI'

Parámetros por referencia Si ejecutamos las anteriores sentencias, obtendremos el resultado directamente en la ventana que tengamos abierta en SQL Server. Pero ¿qué pasa si queremos obtener un parámetro de salida, como resultado de la ejecución del procedimiento? La solución para este caso es utilizar la palabra reservada OUTPUT para los argumentos de salida. Si por ejemplo, queremos obtener el número de títulos que tenemos en la base de datos, crearemos el siguiente procedimiento almacenado: CREATE PROCEDURE num_productos @productos int OUTPUT AS SELECT * FROM Products

Page 3: UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA …...Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor

3

SELECT @productos = @@ROWCOUNT RETURN (0)

Vamos a estudiar el anterior ejemplo: Detrás de la palabra reservada PROCEDURE damos el nombre del procedimiento almacenado, y a continuación proporcionamos los parámetros, junto con su tipo (que en este caso es entero), y diremos si éstos son de salida, en cuyo caso especificamos la palabra reservada OUTPUT a continuación. Tras la palabra reservada AS se codifica el cuerpo del procedimiento. Primero contamos todas las filas de la tabla Products, realizando un SELECT * FROM Products. A continuación devolvemos en el parámetro @productos el valor obtenido, utilizando @@ROWCOUNT. Para ejecutar este procedimiento ejecutamos las siguientes sentencias (las tres al mismo tiempo): DECLARE @productos int EXEC num_productos @productos OUTPUT SELECT [Total de productos] = @productos En el resultado de la consulta nos mostrará los registros de la tabla Products y en una nueva fila el valor de la variable @productos en una columna llamada Total de productos

Borrar Procedimientos Almacenados Si queremos borrar un procedimiento almacenado, ejecutaremos la sentencia DROP PROCEDURE, seguido del nombre del procedimiento. Por ejemplo, si queremos borrar el procedimiento almacenado, creado en el anterior ejemplo, escribiremos el Código: DROP PROCEDURE num_productos

III. Requerimientos

Nº Cantidad Descripción

1 1 Guía de Laboratorio #10 de Modelamiento y diseño de base de Datos

2 1 Maquina con SQL Server 2012

Page 4: UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA …...Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor

4

IV. Procedimiento

Ejercicio 1

1. Utilice la base de datos NorthWind

2. Vamos a crear un procedimiento almacenado que ingrese un nuevo registro a la tabla Categories solo si el Código o el Nombre de la categoría que se le envían como parámetros no existan en la tabla.

3. Ejecutemos el procedimiento anterior comprobando si funciona correctamente, ejecutar cada instrucción individualmente:

Nota: si los datos del ejemplo anterior existen en la tabla probar con otros datos

4. Hacer un SELECT y verifique cuantos registros se agregaron a la tabla Categories

Page 5: UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA …...Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor

5

Ejercicio 2

1. En el siguiente procedimiento hacemos uso de la sentencia CASE para verificar si existen clientes en una determinada ciudad la cual su dato se pasa como parámetro.

2. Ejecutemos el procedimiento anterior comprobando si funciona correctamente:

Ejercicio 3.

1. En el siguiente procedimiento se calcula el total de ventas de los pedidos que están almacenados en la tabla Order Details

La función CONVERT () es una función general que convierte una expresión de un tipo de dato a otro.

2. Ejecutar el procedimiento

3. Ahora vamos a alterar o modificar el procedimiento para que reciba como parámetro de entrada una orden o pedido especifico

Page 6: UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA …...Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor

6

4. Ejecutar el procedimiento

5. Ahora ejecutamos el mismos procedimiento con otro código de pedido

Analice y comente la diferencia entre los resultados obtenidos, como se dará cuenta el OrderID 10242 no existe en la tabla, pero al ejecutarse se muestran las columnas con datos vacíos

6. Se puede modificar el procedimiento de la siguiente manera, en donde se muestra un mensaje indicando que no existe esa orden

ALTER PROCEDURE PROCE_TotalSuCarnet @Cod_orden int AS DECLARE @total INT --Declaracion de variables locales SELECT @total=COUNT(orderid) FROM [Order Details] WHERE OrderID=@Cod_orden IF (@total>=1) --Evalua condicion BEGIN SELECT OD.OrderID, SUM(CONVERT (money,(OD.UnitPrice*Quantity*(1-Discount)/100))*100) as Total FROM [Order Details] OD WHERE OrderID=@Cod_orden GROUP BY OD.OrderID END ELSE BEGIN PRINT 'La orden no existe y el código es: ' +CONVERT(varchar(10),@Cod_orden)

END GO

7. Ejecutar el procedimiento

8. Verifique y analice los resultados

Page 7: UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA …...Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor

7

9. Guardar el script con el nombre Guia10_BasedeDatosSucarnet.sql

Ejercicio 4:

1. Crear el siguiente procedimiento almacenado:

2. Ejecutamos el procedimiento almacenado

Ejercicio 5:

1. En el ejemplo siguiente, si el precio de venta promedio de un producto es inferior a $300, se realiza dentro del bucle WHILE la acción de duplicar los precios y, a continuación, selecciona el precio máximo. Si el precio máximo es menor o igual que $500, el bucle WHILE se reinicia y se vuelve a duplicar los precios. El bucle realiza la operación hasta que el precio máximo sea mayor a $500, después de lo cual finaliza el bucle WHILE.

Page 8: UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA …...Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor

8

2. Antes de ejecutar el procedimiento se debe verificar la información de la tabla Products, por ejemplo al ejecutar la consulta:

3. Se obtienen los siguientes resultados (estos pueden variar, tomar en cuenta los resultados obtenidos en la consulta)

4. Ahora ejecutar el procedimiento almacenado

5. Ahora verifique los resultados, ejecutando la consulta del punto 5, si no hay cambios en los datos, modifique el procedimiento almacenado por la siguiente información:

6. Ejecute de nuevo el procedimiento almacenado y verifique los resultados

Page 9: UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA …...Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor

9

Ejercicio 5:

1. En el siguiente ejemplo se desea mostrar los nombres de los clientes que se encuentran en la tabla

Customers

Nota: Cuando trabajemos con cursores debemos seguir los siguientes pasos:

Declarar el cursor, utilizando DECLARE

Abrir el cursor, utilizando OPEN

Leer los datos del cursor, utilizando FETCH ... INTO

Cerrar el cursor, utilizando CLOSE

Liberar el cursor, utilizando DEALLOCATE

Cuando trabajamos con cursores, la función @@FETCH_STATUS nos indica el estado de la última instrucción FETCH emitida, los valores posibles son:

Valor devuelto

Descripción

0 La instrucción FETCH se ejecutó correctamente.

-1 La instrucción FETCH no se ejecutó correctamente o la fila estaba más allá del conjunto de resultados.

-2 Falta la fila recuperada.

2. Ejecutar el procedimiento almacenado

Page 10: UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA …...Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor

10

3. Guardar los cambios al archivo

V. Ejercicio complementario

Ejercicio 1 Crear un procedimiento almacenado que calcule y muestre la edad de un empleado (Tabla Employees, campo BirthDate), puede utilizar la siguiente instrucción para calcular la edad: (CAST(DATEDIFF(dd, BirthDate,GETDATE())/365.25 as int)) Y por medio de una sentencia CASE deberá calcular y mostrar si el empleado esta por retirarse (mayores de 60 y menores o igual a 70 años), si ya está jubilado (mayores a 70 años) o le falta otros años para trabajar (menores o iguales a 60 años) El procedimiento recibe como parámetros el código del empleado (EmployeeID) si el empleado no existe deberá mostrar un mensaje indicándolo. Ejercicio 2

1. En un nuevo Script, crear el ejercicio complementario, debe colocar como nombre: Guia10_EjercicioComplementario_SuCarnet.sql

2. Crear la base de datos, copiar el siguiente código: --Crear la base de datos CREATE DATABASE Control_Examen_SuCarnet GO --Hacer uso de la base de datos USE Control_Examen_SuCarnet GO

3. Crear las siguientes tablas, puede copiar el siguiente código:

CREATE TABLE Alumno ( Carnet VARCHAR(10) NOT NULL PRIMARY KEY, Nombre VARCHAR(30) NOT NULL, Apellido1 VARCHAR(30) NOT NULL, Apellido2 VARCHAR(30) NOT NULL, Sexo VARCHAR(2) NOT NULL, ) GO CREATE TABLE Examenes ( cod_examen INT NOT NULL PRIMARY KEY, titulo VARCHAR(100) NOT NULL, n_preguntas INT NOT NULL,

Page 11: UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA …...Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor

11

) GO CREATE TABLE Notas ( cod_examen INT NOT NULL FOREIGN KEY REFERENCES Examenes(cod_examen), Carnet VARCHAR(10) NOT NULL FOREIGN KEY REFERENCES Alumno(Carnet), nota_examen DECIMAL(4,2) NOT NULL, fecha SMALLDATETIME NOT NULL, ) GO CREATE TABLE Respuestas ( cod_examen INT NOT NULL FOREIGN KEY REFERENCES Examenes(cod_examen), Carnet VARCHAR(10) NOT NULL FOREIGN KEY REFERENCES Alumno(Carnet), n_pregunta INT NOT NULL, opcion_respuesta INT NOT NULL, ) GO CREATE TABLE Preguntas ( cod_examen INT NOT NULL FOREIGN KEY REFERENCES Examenes(cod_examen), n_pregunta INT NOT NULL, texto_pregunta VARCHAR(100) NOT NULL, n_opciones INT NOT NULL, opcion_correcta INT NOT NULL ) GO CREATE TABLE Opciones ( cod_examen INT NOT NULL FOREIGN KEY REFERENCES Examenes(cod_examen), n_pregunta INT NOT NULL, n_opcion INT NOT NULL, texto_opcion VARCHAR(50) NULL ) GO

4. Crear el diagrama de la base de datos

Page 12: UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA …...Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor

12

5. Insertando Datos a partir de Procedimientos Almacenados

6. Para insertar datos en la tabla Alumno, crear un procedimiento llamado Insert_Alumno, tal como se muestra a continuación:

7. Utilizar el procedimiento almacenado creado anteriormente para insertar los siguientes datos:

8. Se insertaran datos en las tablas Examenes, Preguntas y Opciones en base al siguiente formato de examen:

Código del Examen: 1 Título: “Conceptos de Procedimientos Almacenados” No. de Preguntas: 2

1. Con que sentencia se crea un procedimiento almacenado: 1. CREATE PROCEDURE 2. CREATE PROC 3. Ambas (# de opcion correcta: 3)

2. Con que comando se ejecuta un procedimiento almacenado: 1. EXECUTE 2. sp_executesql (# de opcion correcta: 1)

Page 13: UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA …...Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor

13

9. Crear el siguiente procedimiento almacenado para llenar los datos en la tabla Examenes:

10. Agregar los siguientes registros a la tabla Examenes por medio del procedimiento almacenado

11. Por medio de instrucción INSERT agregar los siguientes registros a la tabla Preguntas

12. Agregando registros a la tabla Opciones por medio de la instrucción INSERT

Mensajes de Error definidos por el usuario

Antes de insertar datos en la tabla de Respuestas, se creará un TRIGGER que despliegue un mensaje de advertencia cuando el alumno este contestando la última pregunta del examen (en este caso sería la pregunta 2). Para ello crear primero un mensaje definido por el usuario, este mensaje es añadido a la tabla sysmessages (sysmessages se encuentra en la base de datos master) utilizando el procedimiento almacenado del sistema sp_addmessage. Para crear el mensaje debe especificarse el número del mensaje, el tipo o nivel de severidad y el texto del mensaje. (Los mensajes de error deben tener un número arriba de 50000, pues los otros números son reservados por SQL Server). 13. Crear el siguiente mensaje:

Page 14: UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA …...Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor

14

Si al ejecutar la consulta anterior le aparece el siguiente mensaje de error:

Significa que el número del mensaje 50001 ya existe en la base de datos master, así que cambie el número por uno consecutivo (por ejemplo 50002)

14. Hacer uso de nuevo de la base de datos Control_examen_SuCarnet y creamos un procedimiento almacenado el cual va a realizar la operación de calcular la nota del alumno después de haber contestado el examen

15. Antes de crear el procedimiento almacenado, se verifica la existencia de este en la base de datos, si el procedimiento existe se elimina y sino no se realiza ninguna acción

16. Crear el siguiente procedimiento almacenado

Page 15: UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA …...Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor

15

17. Crear el siguiente TRIGGER el cual se activa después de cada inserción que se realiza en la tabla respuesta verifica que pregunta a contestado el alumno de un examen especifico y se llama al procedimiento Calculo_de_Nota para calcular la nota del examen

18. Verificar la existencia del TRIGGER, ejecutar la siguiente consulta:

19. Digitar el siguiente código:

Page 16: UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA …...Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor

16

20. Realice las siguientes pruebas, ejecutar la siguiente consulta:

21. Ejecutar la siguiente consulta

Al contestar esta última pregunta se activa el TRIGGER y cuando el alumno contesta la última pregunta se ejecuta el procedimiento almacenado para calcular la nota del examen

22. Ejecutar las siguientes consultas

23. Guardar los cambios en el archivo

Page 17: UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA …...Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor

17

VI. Análisis de resultados

Uso de Procedimiento almacenado

La tabla PRODUCTO contiene información general de los productos y la tabla PEDIDO contiene la información del pedido que se realiza de un cierto producto, llenar las tablas con información. Ejercicios:

1. Crear un procedimiento almacenado que ingrese los valores en la tabla PRODUCTOS, y deberá

verificar que el código y nombre del producto no exista para poder insertarlo, en caso que el código

o el nombre del producto ya exista enviar un mensaje que diga “ESTE PRODUCTO YA HA SIDO

INGRESADO”.

2. Crear un procedimiento almacenado que permita realizar un pedido EN LA TABLA PEDIDO, este

procedimiento deberá verificar si el código del producto ingresado existe en la tabla PRODUCTO en

caso de que no se encuentre deberá mostrar un mensaje, así como se muestra a continuación “ESTE

PRODUCTO NO EXISTE “, además si la cantidad a pedir del producto es mayor a la existencia del

producto deberá mostrar un mensaje que diga “EXISTENCIA DEL PRODUCTO INSUFICIENTE”.

En caso que la cantidad a pedir sea menor o igual deberá modificar (o actualizar) el valor de la

existencia del producto.

Page 18: UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERÍA …...Los procedimientos almacenados son conjuntos de sentencias en leguaje Transact SQL que pueden almacenarse en el propio servidor

18

VI. Referencia Bibliográfica

1. La Biblia de SQL Server 2005

Madrid, España: Anaya, 2006 Autor: Mike Gundelerloy y Joseph L. Jorden Biblioteca UDB – Clasificación: 005.361 G975 2006

2. Fundamentos: de Programación con SQL Server 2005

Madrid, España: ANAYA, 2006 Autor: Roberto Vieira Biblioteca UDB – Clasificación: 005.361 V665

3. SQL Server 2008

Madrid, España: ANAYA, 2009 Autor: Francisco Charte Ojeda Biblioteca UDB – Clasificación: 005.361 Ch436 2009