Вы находитесь на странице: 1из 11

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLOGICOS ESCUELA DE COMPUTACION

GUIA DE LABORATORIO N10 Nombre de la practica: Creacin de Vistas y creacin de procedimientos almacenados Lugar de ejecucin: Laboratorio de Informtica Tiempo estimado: 2:30 horas Materia: Base de datos I Docentes: Carlos Alfaro, Blanca Iris Caas y Rodrigo Saravia

CICLO 01-2012

I. Objetivos Qu el estudiante: 1. Disear y crear Vistas para la seleccin de informacin 2. Implementar la programacin con comandos SQL II. Introduccin Terica Vistas Las vistas tiene una tendencia a ser utilizadas mucho o poco: en raras ocasiones se utilizan en su justa medida. Las vistas se podran utilizar para: 1) Reducir la complejidad aparente de la base de datos para los usuarios finales 2) Prevenir la seleccin de columnas confidenciales a la vez que permite el acceso a otros datos importantes En el fondo, una vista no es ms que una consulta almacenada. lo extraordinario es que podemos combinar y hacer corresponder datos desde tablas base (o desde otras vistas) para crear lo que, en general, funciona como cualquier otra tabla base. Al crear una vista, Microsoft SQL Server comprueba la existencia de los objetos a los que se hace referencia en su definicin. El nombre de la vista debe ajustarse a las normas para los identificadores. Opcionalmente, es posible especificar un nombre de propietario para la vista. Debe establecer una convencin de denominacin coherente para distinguir las vistas de las tablas. Por ejemplo, puede agregar la palabra vista como sufijo de cada objeto vista que cree. De este modo podr distinguir fcilmente entre objetos similares (tablas y vistas) al consultar la vista INFORMATION_SCHEMA.TABLES. Sintaxis CREATE VIEW propietario.nombreVista [(columna [,n ])] [WITH {ENCRYPTION | SCHEMABINDING | VIEW_METADATA} [,n ]] AS instruccinSelect [WITH CHECK OPTION] Para poder ejecutar la instruccin CREATE VIEW es necesario ser miembro de la funcin de administradores del sistema (sysadmin), de la funcin propietario de la base de datos (db_owner) o de la funcin administrador de lenguaje de definicin de datos (db_ddladmin), o bien tener el permiso CREATE VIEW. Tambin es necesario tener el permiso SELECT en todas las tablas o vistas a las que la vista haga referencia. Para evitar situaciones en las que el propietario de una vista y el propietario de las tablas subyacentes sean distintos, se recomienda que el usuario dbo (propietario de base de datos) sea el propietario de todos los

objetos de la base de datos. Especifique siempre el usuario dbo como propietario al crear el objeto pues, de lo contrario, usted, es decir, su nombre de usuario, ser el propietario. El contenido de una vista se especifica con una instruccin SELECT. Con algunas excepciones, las vistas pueden ser tan complejas como se requiera. Debe especificar los nombres de columna en las situaciones siguientes: Alguna de las columnas de la vista se deriva de una expresin aritmtica, de una funcin integrada o de una constante. Hay columnas con el mismo nombre en las tablas que se van a combinar.

Ejemplo Este es un ejemplo de una vista que crea una columna (Subtotal) que calcula los subtotales de un pedido a partir de las columnas UnitPrice, Quantity y Discount de la tabla Order Details. CREATE VIEW dbo.OrderSubtotalsView (OrderID, Subtotal) AS SELECT OD.OrderID, SUM(CONVERT (money,(OD.UnitPrice*Quantity*(1-Discount)/100))*100) FROM [Order Details] OD GROUP BY OD.OrderID GO En este ejemplo se consulta la vista para ver los resultados. SELECT * FROM OrderSubtotalsView Resultado OrderID 10271 10977 10440 . . . (830 filas afectadas)

Subtotal 48.0000 2233.0000 4924.1400

Vista de tablas combinadas A menudo se crean vistas para conseguir una forma ms prctica de ver informacin centralizada de dos o ms tablas combinadas.

Modificacin y eliminacin de vistas A menudo, las vistas se alteran como respuesta a las peticiones de informacin adicional por parte de los usuarios o a causa de cambios en la definicin de las tablas subyacentes. Para alterar una vista puede quitarla y volverla a crear, o bien puede ejecutar la instruccin ALTER VIEW. Eliminacin de vistas Si ya no necesita una vista, puede quitar su definicin de la base de datos con la instruccin DROP VIEW. Al quitar una vista se quita su definicin y todos los permisos que tenga asignados. Adems, si los usuarios consultan vistas que hagan referencia a la vista quitada, obtendrn un mensaje de error. Sin embargo, al quitar una tabla que hace referencia a una vista, sta no se quita automticamente. Es necesario quitarla de forma explcita. Se utiliza la instruccin DROP VIEW. Ejemplo.

PROCEDIMIENTOS ALMACENADOS Transact-SQL no es realmente un lenguaje de programacin similar a las herramientas de tercera y cuarta generacin sin embargo permite utilizar SQL para realizar tareas complejas que requieren saltos, bucles, decisiones. Transact-SQL se utiliza a menudo en la creacin de procedimientos almacenados y triggers (desencadenadores) de tal forma que las aplicaciones clientes que se conectan a SQL Server solo se

preocupan por la presentacin de los datos para el usuario final, mientras que la lgica de los procesos se maneja en el servidor. El control de flujo en Transact-SQL Construccin IFELSE GOTO etiqueta WAITFOR Descripcin Define una decisin. Define un salto incondicional Establece un tiempo para la ejecucin de una instruccin. El tiempo puede ser un intervalo de retardo o un instante especificado de ejecucin (una hora concreta del da) Bucle bsico de SQL Acompaa al bucle WHILE y le indica finalizarlo inmediatamente. Acompaa al bucle WHILE y le indica continuar con la siguiente iteracin. Salida incondicional del procedimiento o proceso por lotes, se puede definir un nmero entero como estado devuelto y puede asignarse a cualquier variable. Utilizado en conjunto con IF..ELSE o WHILE para agrupar un conjunto de instrucciones. Implementada en la instruccin SELECT y UPDATE y permite realizar consultas y actualizaciones condicionales.

WHILE BREAK CONTINUE RETURN [n] BEGIN...END CASE

PRINT Es una instruccin para imprimir un dato en la pantalla, la sintaxis es: PRINT "cadena"; cadena puede ser tambin una variable de tipo varchar. Por ejemplo: PRINT Hola a todos 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 ms potentes, porque permiten almacenar funciones y procedimientos compuestos por varias instrucciones, introducir saltos, bucles, etc. Creacin de procedimientos almacenados (Store Procedures) La instruccin 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 parmetros de entrada y devolver parmetros de salida. Por ejemplo, podemos crear un procedimiento para recuperar el nombre de un autor, cuyo cdigo se pasa por parmetro. CREATE PROCEDURE ObtenerNombre @au_id varchar(11) AS SELECT author FROM title WHERE title.title_no = @au_id Con esta sentencia, se crea un procedimiento almacenado, de nombre ObtenerNombre, al que se le pasa un parmetro, llamado @au_id, de tipo varchar, que realiza una consulta para obtener el nombre del autor de la tabla title, cuyo cdigo coincida con el parmetro. De esta forma, si queremos obtener el nombre del autor cuyo cdigo sea '50', deberemos ejecutar el procedimiento pasndole 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. ObtenerNombre '50' Pasando los argumentos nombrados. En este caso no hace falta que los parmetros vayan en el mismo orden. ObtenerNombre @au_id = '45'

Parmetros 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 parmetro de salida, como resultado de la ejecucin del procedimiento?. La solucin para este caso es utilizar la palabra reservada OUTPUT para los argumentos de salida. Si por ejemplo, queremos obtener el nmero de ttulos que tenemos en la base de datos, crearemos el procedimiento almacenado que muestra a continuacin: CREATE PROCEDURE num_titulos @titulos int OUTPUT AS SELECT * FROM title SELECT @titulos = @ROWCOUNT RETURN (0) Vamos a estudiar el anterior ejemplo. Detrs de la palabra reservada PROCEDURE damos el nombre del procedimiento almacenado, y a continuacin proporcionamos los parmetros, 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 continuacin. Tras la palabra reservada AS se codifica el cuerpo del procedimiento. Primero contamos todas las filas de la tabla title, realizando un SELECT * FROM title. A continuacin devolvemos en el parmetro @titulos el valor obtenido, utilizando @@ROWCOUNT. Para ejecutar este procedimiento escribimos las siguientes sentencias: DECLARE @titulos int EXEC num_titulos @titulos OUTPUT SELECT titulos = @titulos Nos mostrar los registros de la tabla y al final el valor de la variable @titulos 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 Cdigo: DROP PROCEDURE num_titulos III. Requerimientos

N 1 2 3 1 1 1

Cantidad

Descripcin Gua de Laboratorio #10 de BD Memoria USB Maquina con SQL Server 2008

IV. Procedimiento

Parte 1: Iniciando sesion desde SQL Server Managment Studio 1. Hacer clic en el botn Inicio 2. Hacer clic en la opcin Todos los programas y hacer clic en Microsoft SQL Server 2008 R2 3. Cargue SQL Server 2008 R2. Para conectarse con el servidor de base de datos elija los siguientes parmetros de autenticacin: Tipo de servidor: Database Engine Nombre del servidor: SALA02-PCNumMaquina Nota: NumMaquina es el nmero de maquina local Autenticacin: SQL Server Authentication Login: sa Password: 123456 4. Luego de clic en el botn conectar y asi ingresar a la ventana del SQL Server Managment Studio. 5. Luego seleccionara del men estndar la opcin (Nueva Consulta/New Query) para empezar a trabajar con las sentencia de T-SQL. 6. Localice el icono de guardar, con el fin de guardar el nuevo archivo de sentencias T-SQL (Practica10_BDD.sql). Parte 2: Ejemplos de Vistas Ejercicio 1 1. En este ejercicio va a crear una vista para administrar las peticiones diarias relativas a la base de datos Northwind. 2. Utilice la informacin de la tabla siguiente para crear una vista que muestre los productos de un proveedor en particular. 3. Opcin Valor Seleccionar la base de datos Northwind 4. Seleccionar la tabla Products 5. Seleccionar columnas ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, Discontinued 6. Definir restriccin WHERE SupplierID = 14 7. Consulte la vista para asegurarse de que ha recibido el conjunto de resultados esperado. Ejercicio 2
1.

Tomado en cuenta la misma base de datos Northwind, debe crear una vista donde se muestren las ventas de un producto las cuales se han realizado el pedido en el ao 1997, los que podra mostrar son los siguientes: a. Nombre del producto b. Fecha de pedido c. Fecha de envi

Parte 3: Ejemplos de Procedimientos almacenados Ejercicio 1 1. Utilice la bases de datos NorthWind para esta parte 2. Vamos a crear un procedimiento almacenado que ingrese un nuevo registro a la tabla Categories solo si el ID que se le enva como parmetro no existe.

3. Ejecutemos el procedimiento anterior comprobando si funciona correctamente exec sp_Insertar_Categorias 1, 'Alimentos' exec sp_Insertar_Categorias 9, 'Alimentos' Ejercicio 2 1. En el siguiente procedimiento hacemos uso de la sentencia CASE para verificar si existen clientes en una determinada ciudad pasada como parmetro.

2. Ejecutemos el procedimiento anterior comprobando si funciona correctamente EXEC sp_Hay_Clientes 'Barcelona' EXEC sp_Hay_Clientes 'New York' Ejercicio 3. 1. En el siguiente procedimiento se calcula el total de ventas de una orden

2. Ejecutar el procedimiento EXEC PROCE_Total 3. Ahora vamos a alterar el procedimiento para que reciba como parmetro de entrada una orden especifica

4. Ejecutar el procedimiento EXEC PROCE_Total 10248 EXEC PROCE_Total 10242 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 vacos, as que se puede modificar el procedimiento de la siguiente manera, en donde se muestra un mensaje indicando que no existe esa orden

5. Ejecutar el procedimiento EXEC PROCE_Total 10248 EXEC PROCE_Total 10242 8

6. Verifique los resultados 7. Guardar los cambios al SCRIPT y mandarlo al profesor V. Ejercicio complementario La base de datos a utilizar es: Northwind Crear las siguientes vistas:
a.

Mostrar el cdigo del producto, el nombre del producto y el precio por unidad de todos los productos de la empresa. Mostrar todos los productos cuya categora sea Beverages. Cuantos productos existen por cada categora Mostrar el promedio de los precios unitarios de produce y confections

b. c. d.

Procedimiento almacenado CREATE DATABASE bodega GO USE bodega GO CREATE TABLE PRODUCTO ( idprod char(7) PRIMARY KEY, descripcion varchar(25), existencias int precio decimal(10,2) not null, --precio costo preciov decimal(10,2) not null, --precio venta ) CREATE TABLE PEDIDO ( idpedido char(7), idprod char(7), cantidad int FOREIGN KEY(idprod) REFERENCES PRODUCTO(idprod) ) La tabla producto contiene informacin general de los productos y la tabla pedido contiene la informacin del pedido que se realiza de un cierto producto, llenar las tablas con informacin. Ejercicios: 1. Crear un procedimiento almacenado que ingrese los valores en la tabla PRODUCTOS, y deber verificar que el cdigo y nombre del producto no exista para poder insertarlo, en caso que el cdigo y 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 cdigo del producto ingresado existe en la tabla PRODUCTO en caso de que no se encuentre deber mostrar un mensaje as como se muestra a continuacin ESTE PRODUCTO NO EXISTE , adems si la cantidad a pedir del producto es mayor a la existencia del producto deber enviar un mensaje que diga EXISTENCIA DEL PRODUCTO INSUFICIENTE, en caso que la cantidad a pedir sea menor o igual deber modificar el valor de la existencia

VI. Anlisis de resultados Se desea tener una base de datos con la siguiente informacin acerca de los alumnos de una academia de idiomas donde se imparten varios cursos: Informacin acerca de los alumnos, que constar de su nombre y apellidos, un cdigo nico para cada alumno, su direccin, fecha de nacimiento y sexo (H o M). Estos alumnos estarn matriculados en un slo curso cada uno. Cada curso tendr un nombre, un cdigo nico que lo identifica, el nmero mximo de alumnos recomendado, la fecha de inicio y de finalizacin del curso y el nmero de horas del curso. Los profesores tendrn una ficha en la academia donde se especifican sus datos personales, es decir, nombre, apellidos (apellido1 y apellido2), DUI, direccin, titulacin, sueldo. Tambin deber llevar la informacin de los horarios de cada curso, tomando en cuenta que cada curso tiene una hora de inicio y una hora de finalizacin. Tomar en cuenta que cada curso y grupo tiene su propio horario y profesor, un curso puede tener muchos grupos y horarios. Agregar como mnimo 5 registros a cada tabla. Aadir el campo edad de tipo numrico a la tabla PROFESORES. Aadir las siguientes restricciones: i. La edad de los profesores est entre 18 y 65 aos. ii. El nmero de horas de los cursos debe ser mayor que 50 iii. El nombre de cada curso es nico iv. La fecha de inicio de cada curso no debe ser mayor a la fecha de finalizacin v. El sueldo debe tener por defecto el dato 0 (cero) 2. Crear los siguientes procedimientos almacenados: a. Crear un procedimiento almacenado que verifique la cantidad de alumnos inscritos en cada grupo, no se debe ingresar un alumno nuevo al curso si este ya llego a su capacidad mxima, si se da el caso mostrar un mensaje y sino agregar el alumno al curso b. Crear un procedimiento almacenado en el cual debe controlar la hora de cada grupo que pertenecen a un curso especfico, ya que debe tomar las siguientes restricciones: Cada curso tiene nicamente 4 grupos, los grupo 1 y 2 solo pueden estar en horarios matutinos (7:00 12:00) y los grupo 3 y 4 solo pueden estar en la tarde (2:00 7:00).

10

Verificar que el profesor no podr tener 2 grupos en el mismo horario y en la misma fecha. c. Crear un procedimiento almacenado, el cual permita actualizar el campo sueldo de la tabla profesores, el procedimiento recibe como parmetros el precio por hora, la cual vale $7.55 (es igual para todos los cursos), tambin recibe como parmetro el DUI del profesor. Para calcular el nuevo sueldo debe contar primero la cantidad de horas por todos los cursos asignados al profesor.

VI. Referencia Bibliogrfica 1. La Biblia de SQL Server 2005 Madrid, Espaa: Anaya, 2006 Autor: Mike Gundelerloy y Joseph L. Jorden Biblioteca UDB Clasificacin: 005.361 G975 2006 2. Fundamentos: de Programacin con SQL Server 2005 Madrid, Espaa: ANAYA, 2006 Autor: Roberto Vieira Biblioteca UDB Clasificacin: 005.361 V665 3. SQL Server 2008 Madrid, Espaa: ANAYA, 2009 Autor: Francisco Charte Ojeda Biblioteca UDB Clasificacin: 005.361 Ch436 2009

11