7
CENTRO DE GESTIÓN DE MERCADOS, LOGÍSTICA Y TECNOLOGÍAS DE LA INFORMACIÓN ANÁLISIS Y DESARROLLO DE SISTEMAS DE INFORMACIÓN Módulo Desarrollo de Bases de datos Taller Procedimientos almacenados 1 Presentado a: Sandra Rueda Instructor Presentado por: Yessica Yubely Rodríguez Villarraga

Solucón Procedimientos Almacenados 1

Embed Size (px)

Citation preview

Page 1: Solucón Procedimientos Almacenados 1

CENTRO DE GESTIÓN DE MERCADOS, LOGÍSTICA Y TECNOLOGÍAS DE LA INFORMACIÓN

ANÁLISIS Y DESARROLLO DE SISTEMAS DE INFORMACIÓN

MóduloDesarrollo de Bases de datos

Taller Procedimientos almacenados 1

Presentado a:Sandra Rueda

Instructor

Presentado por:Yessica Yubely Rodríguez Villarraga

Orden:40130

Page 2: Solucón Procedimientos Almacenados 1

Cuerpo de desarrollo

Usando la base de datos Terminal

1. Procedimiento almacenado (Store Procedure) para consultar los datos del último viaje registrado.Créelo así: use Terminalgo

Create procedure ConsultarViaje -- crea el SP, con un nombreAs --inicia la instrucción de la consultaselect top 1 * -- creamos la sentencia sql de normalfrom viajesorder by vi_fechviaje descgo -- finaliza la instrucción, en este caso la creacion del SP

Pruébelo así:

sp_executesql ConsultarViaje

-- se utiliza la instrucción sp_executesql seguida del nombre del SP

2. La empresa quiere premiar al conductor que mas cantidad de viajes ha hecho, para lo cual, requiere ver el nombre del conductor y la dirección del mismo para poder enviar el premio a su lugar de residencia.

use terminalgoCreate procedure ConsultarViajesAs select top 1 co_nombconduc, co_direconduc, COUNT (vi_numrecorr)as recorridosfrom viajes, conductoresgroup by co_nombconduc, co_direconducgo sp_executesql ConsultarViajes

3. La empresa va a sacar de circulacion los buses que hayan sido fabricados antes de 1995 siempre y cuando la cantidad de viajes realizados supere los 60, para confirmar la informacion desean ver la placa, la fecha de fabricacion del bus y la cantidad de viajes que ha hecho.

Page 3: Solucón Procedimientos Almacenados 1

use terminalgoCreate procedure ConsultarViajesAs select bu_placa, bu_fechfabri, COUNT (vi_numrecorr) as Recorridosfrom Buses b inner join Viajes v on b.bu_placa = v.vi_placawhere year (bu_fechfabri) <1995 group by bu_placa, bu_fechfabrihaving COUNT (vi_numrecorr)>60go sp_executesql ConsultarViajes

Usando la base de datos Northwind

4. El gerente de recursos humanos debe tener disponible la información de cuales de sus empleados ya están pensionados, esto quiere decir que ya cumplieron 60 años, en el procedimiento almacenado, utilice la siguiente sintaxis SQL para hallar la edad.

use NorthwindgoCreate procedure pensionados Asselect LastName, FirstName , DATEDIFF(YEAR,BirthDate,GETDATE()) as Edad,(DATEDIFF(YEAR,BirthDate,GETDATE())- 60) as [Tiempo Pensionado]from Employeeswhere (DATEDIFF(YEAR,BirthDate,GETDATE()))>60gosp_Executesql pensionados

5. El área de recursos humanos debe pasar el reporte anual de cuales de sus empleados están próximos a pensionarse, este reporte muestra el nombre completo del empleado y el tiempo de servicio en años que lleva y el numero de años que falta para pensionarse, únicamente muestra aquellos que tengan entre 55 y 59 años de edad y al menos 17 años de servicio.

use NorthwindgoCreate procedure próximas _pensionesAsSelect LastName, FirstName, DATEDIFF(YEAR,BirthDate,GETDATE()) as Edad, DATEDIFF(YEAR,HireDate,GETDATE())as [Tiempo Servicio], (60 -DATEDIFF(YEAR,BirthDate,GETDATE()) ) as [Tiempo Faltante]

Page 4: Solucón Procedimientos Almacenados 1

From Employeeswhere(DATEDIFF(YEAR,BirthDate,GETDATE())) > = 55 and (DATEDIFF(YEAR,BirthDate,GETDATE())) <= 59 andDATEDIFF(YEAR,HireDate,GETDATE()) >= 17gosp_executesql próximas _pensiones

6. El área de compras requiere generar un reporte diario con los datos de los productos que deben pedir; para ello quieren visualizar el nombre del producto, precio unitario, el precio promedio en ventas y la diferencia entre el precio unitario y el precio promedio en ventas, todo esto siempre y cuando el producto no se encuentre descontinuado.

use NorthwindGoCreate Procedure Reporteas

select P.ProductName,P.UnitPrice, Avg (Od.UnitPrice) AsProm_Precio,(P.UnitPrice - Avg (Od.UnitPrice)) as Diferenciafrom Products P inner Join [Order Details] Od on P.ProductID =Od.ProductIDwhere Discontinued like 0Group by P.ProductName,P.UnitPriceGo

Sp_executesql Reporte

7. Ejecute la siguiente sentencia SQL y observe lo que sucede :

DECLARE @codigo CHAR(5),@compras money

SET @codigo = 'AROUT'SET @compras = (

SELECT SUM(Quantity*UnitPrice)FROM Orders O inner join [order Details] ODON O.OrderID = OD.OrderIDWHERE CustomerID = @codigo)

PRINT ('Total de compras:'+ STR(@compras))

8. Redacte la sentencia que permita ver en pantalla el monto total de ventas del empleado con código 8 durante el año 1997 y la diferencia entre el monto total de ventas del mismo empleado menos lo que vendió en 1997.

Page 5: Solucón Procedimientos Almacenados 1

Se sugiere declarar tres variables para distribuirlas así:

1. Llamar el código del empleado2. Almacenar la ventas del año 19973. Almacenar la diferencia entre el total vendido menos lo vendido en 1997

DECLARE @cod int,@ventas money,@diferencia money

SET @cod = 8 SET @ventas =(select SUM((OD.UnitPrice * Quantity)-Discount)As Ventas from Employees E inner join Orders O on E.EmployeeID = O.EmployeeID inner join [Order Details]OD on O.OrderID = OD.OrderID Where E.EmployeeID = 8)SET @diferencia = (select((SUM ((UnitPrice*Quantity)-Discount))-(select SUM((OD.UnitPrice * Quantity)-Discount) from Employees E inner join Orders O on E.EmployeeID = O.EmployeeID inner join [Order Details]OD on O.OrderID = OD.OrderID Where E.EmployeeID = 8) ) From Employees E inner join Orders O on E.EmployeeID = O.EmployeeID inner join [Order Details]OD on O.OrderID = OD.OrderID) PRINT ('Total de Ventas Empleado:'+ STR(@ventas))PRINT ('Total Diferencia:' + STR (@diferencia))