You are on page 1of 6

c

c

c  
 c
c 
cc
cc  c
ccccc
 cc Fecha:
Sistema de   cc   c!c Noviemb
Gestión de  ""c#c" cc"""cc    c re-2010
la Calidad
c
Solución taller Procedimientos Almacenados 1

Lady Leonor Moreno Castro

40130

Presentado a:

Sandra Rueda

Base de Datos

Análisis y Desarrollo de Sistemas de Información

c
c
c

c  
 c
c 
cc
cc  c
ccccc
 cc Fecha:
Sistema de   cc   c!c Noviemb
Gestión de  ""c#c" cc"""cc    c re-2010
la Calidad
c
   "c  "c$c
c
c
Redacte las sentencias SQL para crear los procedimientos almacenados para los
siguientes planteamientos:

º cc% cc
 c  c
c
1. Procedimiento almacenado (Store Procedure) para consultar los datos del último
viaje registrado.
&c !cc

use Terminal
go

Create procedure ConsultarViaje -- crea el SP, con un nombre


As --inicia la instrucción de la consulta
select top 1 * -- creamos la sentencia sql de normal
from viajes
order by vi_fechviaje desc
go -- finaliza la instrucción, en este caso la creacion del SP

sp_executesql ConsultarViaje

/*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 Terminal
go

Create procedure CantidadViajes


As
select co_nombconduc,co_direconduc,COUNT (vi_placa)As [Cantidad Viajes]
from Conductores C inner join Viajes V on C.co_codiconduc=V.vi_codiconduc
group by co_nombconduc,co_direconduc
order by [Cantidad Viajes] desc
go

sp_executesql CantidadViajes

/*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 desea n
ver la placa, la fecha de fabricacion del bus y la cantidad de
viajes que ha hecho.*/

use Terminal
go
Create procedure Buses_fuera_circulacion
c
c

c  
 c
c 
cc
cc  c
ccccc
 cc Fecha:
Sistema de   cc   c!c Noviemb
Gestión de  ""c#c" cc"""cc    c re-2010
la Calidad
c
As
select bu_placa,bu_fechfabri ,COUNT (vi_placa)As [Cantidad Viajes]
from Buses B inner join Viajes V on B.bu_placa=V.vi_placa
where year(bu_fechfabri )<1995
Group by bu_placa,bu_fechfabri
Having COUNT (vi_placa)>60

go

sp_executesql Buses_fuera_circulacion

º cc% cc
 c 
'( c
c
4. El gerente de recursos humanos debe tener disponible la información de
cuáles 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.

DATEDIFF(YEAR,NomColumnaTipoFecha ,GETDATE())

La función DATEDIFF permite obtener el valor que resulta de extraer una de


las partes que compone un dato de tipo fecha. Se continúa la sintaxis
agregando, entre paréntesis y separando con coma, la parte que se desea
obtener (año, mes ó día), se agrega ahora el nombre de la columna con fecha
más antigua y por último, el nombre del otro campo con el cual se va a
comparar; es importante señalar que la función GETDATE() permite obtener la
fecha actual en la cual se ejecute la s entencia; por lo tanto, es conveniente
usarla para obtener datos referentes a aniversarios como edad, tiempo de
servicio, años, meses o días transcurridos desde una fecha a otra.
Los datos que quiere visualizar el gerente son el nombre completo del
empleado y el tiempo de pensionado que lleva.

use Northwind
go

Create procedure Empleados_Pensionados


As

Select LastName,FirstName,BirthDate,HireDate,2010-YEAR(BirthDate)-60 As
[Tiempo Pensionado]
from Employees
where DATEDIFF(YEAR, BirthDate,GETDATE()) >60
group by LastName,FirstName,HireDate,BirthDate
order by HireDate asc
go

sp_executesql Empleados_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
c
c

c  
 c
c 
cc
cc  c
ccccc
 cc Fecha:
Sistema de   cc   c!c Noviemb
Gestión de  ""c#c" cc"""cc    c re-2010
la Calidad
c
completo del empleado y el tiempo de servicio en años que lleva y el número
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 Northwind
go
Create procedure Empleados_Proximos_Pension
As
select LastName,FirstName,2010-Year(BirthDate)as Edad,2010-
YEAR(HireDate) As Tiempo_Servicio
from Employees
where DATEDIFF(YEAR, BirthDate,GETDATE()) >=55 and
DATEDIFF(YEAR, BirthDate,GETDATE())<=59 and 2010-YEAR(HireDate)>=
17
order by BirthDate asc
go

sp_executesql Empleados_Proximos_Pension

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, t odo esto siempre y cuando el producto
no se encuentre descontinuado.

use Northwind
go
Create procedure Productos_a_Pedir
As

select ProductName,P.UnitPrice,Discontinued ,AVG((Quantity*OD.UnitPrice)-


Discount) As Promedio_Ventas ,
(((Quantity*OD.UnitPrice)-Discount)- P.UnitPrice)AS Diferencia
from Products P inner join [Order Details]OD on P.ProductID=OD.ProductID
where Discontinued =1
group by ProductName,P.UnitPrice,Quantity,Discount,OD.UnitPrice,Discontinued

go
sp_executesql Productos_a_Pedir

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)
c
c

c  
 c
c 
cc
cc  c
ccccc
 cc Fecha:
Sistema de   cc   c!c Noviemb
Gestión de  ""c#c" cc"""cc    c re-2010
la Calidad
c
FROM Orders O inner join [order Details] OD
ON O.OrderID = OD.OrderID
WHERE CustomerID = @codigo)
PRINT ('Total de compras:'+ STR(@compras))

En los procedimientos almacenados, es usual utilizar variables que vengan


desde programas conectados al servidor de la base de datos; por lo tanto,
debemos declarar las variables que nos recibirán los datos para que se puedan
comparar con los de la base de datos.

FUNCION OBJETIVO SINTAXIS


Nos permite declarar las diferentes DECLARE @NomVariable
DECLARE variables, es necesario anteponer el Tipo de dato(longitud) para
símbolo @ al nombre de la variable los datos de tipo caracter
y acompañarla con su tipo de dato
SET Inicializa las variables, para que las SET @NomVariable = valor
podamos usar.
PRINT Permite imprimir PRINT(@NomVariable)
STR() Para imprimir concatenando texto PRINT ('Total de compras
con variable del cliente:' +
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.

Se sugiere declarar tres variables para distribuirlas así:

1. Llamar el código del empleado


2. Almacenar la ventas del año 1997
3. Almacenar la diferencia entre el total vendido menos lo vendido en 1997

DECLARE

@codigo int,
@Diferencia integer,
@total integer

set @codigo=8
set @total =(

select sum ((UnitPrice*Quantity)-Discount) as total


c
c

c  
 c
c 
cc
cc  c
ccccc
 cc Fecha:
Sistema de   cc   c!c Noviemb
Gestión de  ""c#c" cc"""cc    c re-2010
la Calidad
c
from Orders o inner join [Order Details] ord on o.OrderID = ord.OrderID
where EmployeeID = 8 and YEAR(OrderDate) = 1997
group by EmployeeID)

set @Diferencia= ((select sum ((UnitPrice*Quantity)-Discount)


from Orders o inner join [Order Details] ord on o.OrderID = ord.OrderID)-
( select sum ((UnitPrice*Quantity)-Discount) as total
from Orders o inner join [Order Details] ord on o.OrderID = ord.OrderID
where EmployeeID = @codigo and YEAR(OrderDate) = 1997
group by EmployeeID))

print ('El señor del Codigo:' + str(@codigo))


print ('En el año 1997 VENDIO' + str(@total))
print ('La diferencia con respecto a todo el año fue:' + str(@Diferencia))

You might also like