Guia 9
Guia 9
Guia 9
GUIA DE LABORATORIO N9
Nombre de la practica: Creacin de Vistas y Procedimientos Almacenados
Lugar de ejecucin: Laboratorio de Informtica
Tiempo estimado: 2 horas y 30 minutos
Materia: Base de datos
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:
a. Reducir la complejidad aparente de la base de datos para los usuarios finales
b. 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 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
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.
Ejemplo
Agregar un nuevo campo (CompanyName de la tabla Customers) a la consulta ShipStatusView
ALTER VIEW dbo.ShipStatusView
AS
SELECT OrderID, ShippedDate, ContactName, CompanyName
FROM Customers c INNER JOIN Orders o
ON c.CustomerID=o.CustomerID
WHERE RequiredDate<ShippedDate
GO
Resultado
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
INSTRUCCIN
IFELSE
GOTO etiqueta
WAITFOR
WHILE
BREAK
CONTINUE
RETURN [n]
BEGIN...END
CASE
PRINT
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.
Es una instruccin que se utiliza 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 cliente (), cuyo cdigo se
pasa por parmetro.
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 parmetro, llamado @cliente_id, de tipo nchar tamao 5, que realiza una consulta para obtener el
nombre del cliente de la tabla Customers, cuyo cdigo (CustomerID) coincida con el parmetro. De esta
forma, si queremos obtener el nombre del Cliente cuyo cdigo sea 'ALFKI', deberemos ejecutar el
procedimiento pasndole como argumento este valor.
Las llamadas a procedimientos almacenados se pueden realizar de las siguientes formas:
Pasando los argumentos nombrados. En este caso no hace falta que los parmetros vayan en el
mismo orden.
EXEC ObtenerNombre @cliente_id='ALFKI'
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
N
1
2
3
Cantidad
1
1
1
Descripcin
Gua de Laboratorio #10 de Base de Datos
Memoria USB
Maquina con SQL Server 2012
IV. Procedimiento
2.
Hacer clic en la opcin Todos los programas y hacer clic en Microsoft SQL Server 2012
Para conectarse con el servidor de base de datos elija los siguientes parmetros de autenticacin:
3.
6. Modificar la vista anterior y ahora se debe mostrar tambin el nombre del proveedor
(CompanyName) el cual est almacenado en la tabla Suppliers
7. Eliminar la vista
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 en el ao 1997, los campos que podra mostrar
son los siguientes:
a. Nombre del producto (ProductName)
b. Fecha de pedido (OrderDate)
c. Fecha de envi (ShippedDate)
d. Calcular el subtotal (UnitPrice*Quantity)
2.
3.
Ejercicio 3
1.
2.
3.
4.
5.
6.
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
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 parmetro.
10
Ejercicio 3.
1. En el siguiente procedimiento se calcula el total de ventas de los pedidos que estn almacenados
en la tabla Order Details
La funcin CONVERT () es una funcin general que convierte una expresin de un tipo de dato a
otro.
2. Ejecutar el procedimiento
3. Ahora vamos a alterar o modificar el procedimiento para que reciba como parmetro de entrada
una orden o pedido especifico
4. Ejecutar el procedimiento
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
6. Se puede modificar el procedimiento de la siguiente manera, en donde se muestra un mensaje
indicando que no existe esa orden
11
7. Ejecutar el procedimiento
V. Ejercicio complementario
Creacin de Vistas
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.
b.
c.
Mostrar los datos del cliente y las fechas de las ordenes que estos han realizado
12
d.
e.
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
o el nombre del producto ya exista enviar un mensaje que diga ESTE PRODUCTO YA HA SIDO
INGRESADO.
13
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 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.
14