Base de datos I Facultad de Ingeniería. Escuela de computación. 1
2 Base de datos I, Guía 9 Introducción Este manual ha sido elaborado para orientar al estudiante de Bases de datos I en el desarrollo de sus prácticas de laboratorios, haciendo uso de este antes, durante y después de la práctica, de tal forma que ofrece un método facilitador en su proceso de enseñanza/aprendizaje durante esta asignatura. En el desarrollo de esta asignatura se ha designado realizar las prácticas en 16 sesiones semanales de laboratorios, los que incluyen 11 prácticas, dos parciales y un proyecto final durante los cuales, el estudiante aplicará los conceptos y las técnicas fundamentalmente necesarias para el dominio de programas para el uso, configuración y administración de SQL Server 2008 o superior. Todas las guías de laboratorio están estructuradas de la siguiente forma: - Objetivos - Materiales y equipos - Introducción teórica - Procedimiento - Bibliografía - Hoja de evaluación (En caso de que la actividad sea evaluada)
Base de datos I. Guía 9 3 Facultad: Ingeniería. Escuela: Computación. Asignatura: Base de datos I. Tabla de Contenido Pág. Guía 9. Procedimientos almacenados. Guía 6 Contenido a 1 ----------------------------------------------- 4 Objetivos ----------------------------------------------- 4 Materiales y equipos ------------------------------------ 4 Introducción -------------------------------------------- 4 Procedimientos almacenados ------------------------------ 4 Ventajas de usar procedimientos almacenados ------------- 5 Ejemplo: Utilizando SQL Server Management Studio -------- 6 Modificar procedimientos almacenados -------------------- 11 Ejemplo: Utilizar Transact SQL -------------------------- 12 Ejercicios ---------------------------------------------- 14 Investigación ------------------------------------------- 15 Bibliografía -------------------------------------------- 15
4 Base de datos I, Guía 9 Tema: Procedimientos almacenados. Contenidos En la guía se presentarán conceptos que les permitan a los estudiantes poder hacer uso de procedimientos almacenados. Objetivo Específico Crear procedimientos almacenados para ser usados en el desarrollo de software. Materiales y Equipo SQL SERVER 2008 o superior. Guía de práctica. Base de datos de ejemplo: autos. https://msdn.microsoft.com/es-sv/library/ms345415.aspx https://msdn.microsoft.com/es-es/library/ms190782.aspx Introducción Teórica Uno de los procedimientos más usados en el diseño de la base de datos, son los Procedimiento almacenados, pues estos permiten agilizar los procesos de consultas de datos, aumentar la seguridad, reutilizar código y permiten desarrollo de software más ágil evitar hacer más código. Procedimientos almacenados. Un procedimiento almacenado de SQL Server es un grupo de una o varias instrucciones Transact-SQL o una referencia a un método de Common Runtime Language (CLR) de Microsoft.NET Framework. Los procedimientos se asemejan a las construcciones de otros lenguajes de programación, porque pueden:
Base de datos I. Guía 9 5 Aceptar parámetros de entrada y devolver varios valores en forma de parámetros de salida al programa que realiza la llamada. Contener instrucciones de programación que realicen operaciones en la base de datos. Entre otras, pueden contener llamadas a otros procedimientos. Devolver un valor de estado a un programa que realiza una llamada para indicar si la operación se ha realizado correctamente o se han producido errores, y el motivo de estos. Ventajas de usar procedimientos almacenados. Tráfico de red reducido entre el cliente y el servidor Los comandos de un procedimiento se ejecutan en un único lote de código. Esto puede reducir significativamente el tráfico de red entre el servidor y el cliente porque únicamente se envía a través de la red la llamada que va a ejecutar el procedimiento. Mayor seguridad Varios usuarios y programas cliente pueden realizar operaciones en los objetos de base de datos subyacentes a través de un procedimiento, aunque los usuarios y los programas no tengan permisos directos sobre esos objetos subyacentes. El procedimiento controla qué procesos y actividades se llevan a cabo y protege los objetos de base de datos subyacentes. Esto elimina la necesidad de conceder permisos en cada nivel de objetos y simplifica los niveles de seguridad. Reutilización del código El código de cualquier operación de base de datos redundante resulta un candidato perfecto para la encapsulación de procedimientos. De este modo, se elimina la necesidad de escribir de nuevo el mismo código, se reducen las inconsistencias de código y se permite que cualquier usuario o aplicación que cuente con los permisos necesarios pueda acceder al código y ejecutarlo.
6 Base de datos I, Guía 9 Mantenimiento más sencillo Cuando las aplicaciones cliente llaman a procedimientos y mantienen las operaciones de base de datos en la capa de datos, solo deben actualizarse los cambios de los procesos en la base de datos subyacente. El nivel de aplicación permanece independiente y no tiene que tener conocimiento sobre los cambios realizados en los diseños, las relaciones o los procesos de la base de datos. Rendimiento mejorado De forma predeterminada, un procedimiento se compila la primera vez que se ejecuta y crea un plan de ejecución que vuelve a usarse en posteriores ejecuciones. Como el procesador de consultas no tiene que crear un nuevo plan, normalmente necesita menos tiempo para procesar el procedimiento. Procedimiento Bibliografía Ejemplo: Utilizando SQL Server Management Studio Guía 1 Utilizando la base de datos Autos, crearemos un procedimiento almacenado para realizar búsquedas de repuestos por su nombre y que cumplan la condición que estén arriba de un precio dado. En primer lugar vamos a buscar la base de datos Autos y la expandiremos, después buscaremos Programmability (programación) y la expandiremos, y nos quedara como lo muestra la siguiente figura.
Base de datos I. Guía 9 7 Haga clic con el botón secundario en Procedimientos almacenados y, a continuación, haga clic en Nuevo procedimiento almacenado. Este procedimiento nos devolverá la una pestaña de consulta, el siguiente código: -- ================================================ -- Template generated from Template Explorer using: -- Create Procedure (New Menu).SQL - - -- Use the Specify Values for Template Parameters -- command (Ctrl-Shift-M) to fill in the parameter -- values below. - - -- This block of comments will not be included in -- the definition of the procedure. -- ===============================================
8 Base de datos I, Guía 9 Es importante hacer ver que por default me presenta para realizar un procedimiento con dos parámetros, pero si necesito más o menos, se puede borrar o aumentar según sea conveniente para la consulta que queremos utilizar. Además se presentan opciones para poner valores por Default a las variables, estos no son obligatorios y pueden usarse según sea conveniente o borrarse. En el menú Query (Consulta), haga clic en Specify Values for Template Parameters (Especificar valores para parámetros de plantilla), como lo muestra la siguiente figura.
Base de datos I. Guía 9 9 Esta opción me mostrar un cuadro de dialogo, en cual usted debe especificar valores para los parámetros de plantilla, especifique los siguientes valores para los parámetros mostrados. Después en el Editor de consultas, reemplace la instrucción SELECT por la siguiente instrucción: SELECT repuestos.nombre,repuestos.precio,repuestos.descuento FROM repuestos WHERE repuestos.nombre like @Nombre and precio > @valor Es importante corregir una línea donde se encuentra los paramentos Debemos borrar el signo de igual, y dejar la instrucción con la figura siguiente.
10 Base de datos I, Guía 9 Para probar la sintaxis, en el menú Query (Consulta), haga clic en Parse (Analizar). Si se devuelve un mensaje de error, compare las instrucciones con la información anterior y corrija lo que sea necesario. Una vez todo listo proceda a Execute (Ejecutar). El procedimiento se crea como un objeto de la base de datos, tal como lo muestra la figura. Para ejecutar el procedimiento, en el Explorador de objetos, haga clic con el botón derecho en el nombre del procedimiento almacenado BRepuestos y seleccione Execute Store Procedure (Ejecutar procedimiento almacenado). En esta opción veremos que la ventana nos pide el valor de los dos parámetros, para el ejemplo hacemos que busque todos los repuestos que empiecen con Pren agregamos el comodin %, y en el valor ponemos 10. Ahora para ver el resultado presionamos aceptar, y nos mostrara los siguientes resultados.
Base de datos I. Guía 9 11 Modificar procedimientos almacenados. Para modificar un procedimiento almacenado lo primero es buscarlo en el explorador de objetos y después clic derecho sobre el, como lo muestra la figura. Lo cual nos colocara el código para ser editado en el manejador de consultas, como se muestra en la siguiente imagen.
12 Base de datos I, Guía 9 Cambiaremos un poco la consulta, aumentándole dos campos y cambiando el orden de ella, quedando la consulta de esta manera: SELECT marca.marca,marca.pais,modelos.modelo, modelos.precio,modelos.year_modelo FROM marca INNER JOIN modelos ON marca.id_marca = modelos.id_marca ORDER BY modelos.year_modelo Una vez efectuados los cambios, ejecutamos el procedimiento almacenado, y ya podemos utilizarlo. EXEC ListaPrecio Ejemplo: Utilizando Transact SQL También puede escribir directamente el código y crear un procedimiento almacenado directamente, un ejemplo seria el siguiente código: USE autos GO CREATE PROCEDURE ModelosXMarca @busca varchar(15) AS BEGIN SELECT marca.marca, modelos.modelo, modelos.precio FROM marca INNER JOIN modelos ON marca.id_marca = modelos.id_marca WHERE marca.marca like @busca END Este procedimiento muestra los modelos de una marca de carros, a partir de nombre de marca de búsqueda. Para probar este procedimiento, lo ejecutamos usando la palabra Execute o Exce, por ejemplo: O EXEC ModelosXMarca 'Che%'
Base de datos I. Guía 9 13 EXECUTE ModelosXMarca 'Che%' El resultado será el siguiente: También puede crear procedimientos almacenados sin parámetros, un ejemplo seria el siguiente: USE autos GO CREATE PROCEDURE ListaPrecios AS BEGIN SELECT marca.marca, modelos.modelo, modelos.precio FROM marca INNER JOIN modelos ON marca.id_marca = modelos.id_marca ORDER BY modelos.precio END Lo probamos ejecutando el siguiente código: EXEC ListaPrecios Y el resultado es el siguiente:
14 Base de datos I, Guía 9 Ejercicios Guía 3 Cree un procedimiento almacenado para mostrarme una Guía 4 fía lista de repuestos con su nombre, precio, porcentaje de descuento y el valor que tuviera si se aplica dicho descuento. Elabore otro que tenga un parámetro que me pida el modelo del auto, y que me muestre todos los repuestos que pertenecen a ese modelo de auto. Ahora elabore uno que muestre la marca, el país, el nombre del modelo y el precio, pero que me pida dos parámetros, país y precio, para usarlo en la búsqueda. También elabore uno que me muestre los datos del repuesto, modelo y marca, a partir de que el precio de los repuestos, este entre dos valores. Cree una lista de modelos y que muestre la cantidad de repuestos que hay por cada modelo. Pruebe realizando cambios en cualquiera de los procedimientos, y después use las demás tablas que hemos visto en otra prácticas y realice más ejercicios. Anexos Guía 3 CREATE DATABASE autos GO Guía 4 USE autos GO fía CREATE TABLE marca ( id_marca int identity(1,1), marca varchar(15), pais varchar(15), CONSTRAINT pk_marca PRIMARY KEY(id_marca) )
Base de datos I. Guía 9 15 CREATE TABLE modelos ( id_modelos int identity(1,1), modelo varchar(15), asientos int, combustible varchar(10), precio smallmoney, year_modelo varchar(4), id_marca int, CONSTRAINT pk_modelos PRIMARY KEY(id_modelos), CONSTRAINT fk_modelos FOREIGN KEY(id_marca) REFERENCES marca(id_marca) ) CREATE TABLE repuestos ( id_rep int identity(1,1), nombre varchar(40), precio smallmoney, descuento int, id_modelos int, CONSTRAINT pk_repuesto PRIMARY KEY(id_rep), CONSTRAINT fk_repuestos FOREIGN KEY(id_modelos) REFERENCES modelos(id_modelos) ) INSERT INTO marca VALUES ('Toyota','Japon') INSERT INTO marca VALUES ('Kia','Corea') INSERT INTO marca VALUES ('Fiat','Italia') INSERT INTO marca VALUES ('Chevrolet','USA') INSERT INTO marca VALUES ('Mercedez','Alemania') INSERT INTO marca VALUES ('Honda','Japon') INSERT INTO modelos VALUES ('Civic',4,'Gasolina',10000,'2010',6) INSERT INTO modelos VALUES ('CRX',4,'Gasolina',6800,'1995',6) INSERT INTO modelos VALUES ('300 SL',4,'Gasolina',16800,'2004',5) INSERT INTO modelos VALUES ('Chevy',4,'Gasolina',9800,'1999',4) INSERT INTO modelos VALUES ('Camaro',5,'Gasolina',12800,'2001',4) INSERT INTO modelos VALUES ('Aveo',5,'Gasolina',9300,'2000',4) INSERT INTO modelos VALUES ('Malibu',5,'Gasolina',8000,'2007',4)
16 Base de datos I, Guía 9 INSERT INTO modelos VALUES ('Uno',5,'Gasolina',6800,'2007',3) INSERT INTO modelos VALUES ('Cerato',5,'Gasolina',9000,'2011',2) INSERT INTO modelos VALUES ('Rio',5,'Gasolina',13000,'2010',2) INSERT INTO repuestos VALUES ('Manecia',12.3,10,1) INSERT INTO repuestos VALUES ('Empaque de Culata',21.6,10,2) INSERT INTO repuestos VALUES ('Bomper delantero',25.7,10,9) INSERT INTO repuestos VALUES ('Filtro de aire',10,10,1) INSERT INTO repuestos VALUES ('Parabrisas delantero',17.8,10,3) INSERT INTO repuestos VALUES ('Timon ajustable',58.5,10,8) INSERT INTO repuestos VALUES ('Liquido de Frenos',3.43,10,1) INSERT INTO repuestos VALUES ('Amortiguadores',50,10,2) INSERT INTO repuestos VALUES ('Perno Llantas',7,10,1) INSERT INTO repuestos VALUES ('PUerta conductor',8.98,10,1) INSERT INTO repuestos VALUES ('Bonba de Gasolina',37.7,10,2) INSERT INTO repuestos VALUES ('Bujillas especiales',22,10,4) INSERT INTO repuestos VALUES ('Asiento',125,10,1) INSERT INTO repuestos VALUES ('Chapa baul',25.8,10,3) INSERT INTO repuestos VALUES ('Faja Distribuidor',34.3,10,1) INSERT INTO repuestos VALUES ('Pintura carroceria',65,10,7) INSERT INTO repuestos VALUES ('Cable alternador',14,10,2) INSERT INTO repuestos VALUES ('Cable bateria',4.60,10,1) INSERT INTO repuestos VALUES ('Aditivos Motor',9.7,10,1) INSERT INTO repuestos VALUES ('Aditivos Motor',13.6,20,2) INSERT INTO repuestos VALUES ('Prensa de Clocth',140.3,20,1) INSERT INTO repuestos VALUES ('Prensa de Clocth',100.3,20,2) INSERT INTO repuestos VALUES ('Disco Frenos',21.2,20,4) INSERT INTO repuestos VALUES ('Disco Frenos',29.90,20,5) INSERT INTO repuestos VALUES ('Pastillas',2.3,20,2) INSERT INTO repuestos VALUES ('ROLES PILOTO',10,20,6) INSERT INTO repuestos VALUES ('Manecia',22,20,1) INSERT INTO repuestos VALUES ('Manecia',43.1,20,2) INSERT INTO repuestos VALUES ('Relay de arranque',11,20,9) INSERT INTO repuestos VALUES ('Relay de arranque',37.2,20,7) INSERT INTO repuestos VALUES ('BUSHING DE CREMALLERA',25,30,8) INSERT INTO repuestos VALUES ('BUSHING DE CREMALLERA',15,30,3) INSERT INTO repuestos VALUES ('Manecia',20,30,2) INSERT INTO repuestos VALUES ('Silvines',32,30,2) INSERT INTO repuestos VALUES ('Silvines',56,45,7) INSERT INTO repuestos VALUES ('Silvines',7.8,30,2) INSERT INTO repuestos VALUES ('Platinos',21.6,30,1) INSERT INTO repuestos VALUES ('Platinos',17.3,30,2) INSERT INTO repuestos VALUES ('Condensador',45,30,4)
Base de datos I. Guía 9 17 INSERT INTO repuestos VALUES ('Condensador',2.3,30,3) INSERT INTO repuestos VALUES ('Alternadores',34.23,30,5) Investigación Complementaria Investigar el siguiente comando que se detallan a continuación: - Concepto, - Sintaxis, - Ejemplo. Guía 3 Desencadenadores / Triggers Guía 4 Bibliografía Peter Rob, Carlos Coronel, SISTEMAS DE BASES DE DATOS, THOMSON, México, 2006 Thomas Connolly, Carolyn Begg, SISTEMAS DE BASES DE DATOS, PERSON, España, 2007 Abraham Silberschatz, FUNJDAMENTOS DE BASES DE DATOS, MCGRAW-HILL, Edición Digital, 2006 Salazar Francisco, APRENDA SQL SERVER 2012. Ross Mistry and Stacia Misner. Introducing Microsoft SQL Server 2012. MicroSoft Press. Disponible digitalmente en Recursos electronicos de la biblioteca en Google Académico. Guía 3 Guía 4 fía