You are on page 1of 6

CENTRO DE GESTION DE MERCADOS LOGISTICA Y TECNOLOGIAS DE LA

Fecha:
INFORMACION
octubre/2010
ANALISIS Y DESARROLLO DE SISTEMAS DE INFORMACION

Nombre del Aprendiz: Cindy Rodríguez


Grupo: 40130

PROCEDIMIENTOS ALMACENADOS 1

Redacte las sentencias SQL para crear los procedimientos almacenados para
los siguientes planteamientos:

Usando la base de datos Terminal

1. Procedimiento almacenado (Store Procedure) para consultar los datos


del último viaje registrado.
Créelo así:
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

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 terminal
go
Create procedure PremiarConductor
As
Select
top
1
co_nombconduc,
co_direconduc,
COUNT(co_codiconduc)as [Numero Viajes]
Elaborado por: Instructora Sandra Yanneth Rueda Guevara
SENA - Área de Teleinformática
CENTRO DE GESTION DE MERCADOS LOGISTICA Y TECNOLOGIAS DE LA
Fecha:
INFORMACION
octubre/2010
ANALISIS Y DESARROLLO DE SISTEMAS DE INFORMACION

from Conductores C inner join Viajes V on C.co_codiconduc


=
V.vi_codiconduc
group by co_nombconduc, co_direconduc
order by COUNT(co_codiconduc) desc
go
sp_executesql PremiarConductor

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.

use terminal
go
Create procedure Circulacion
As
Select bu_placa, bu_fechfabri, COUNT (vi_placa) as [Numero
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 Circulacion

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.
go
Create procedure Pensionados
As
select LastName, FirstName ,
DATEDIFF(YEAR,BirthDate,GETDATE())
as Edad,
Elaborado por: Instructora Sandra Yanneth Rueda Guevara
SENA - Área de Teleinformática
CENTRO DE GESTION DE MERCADOS LOGISTICA Y TECNOLOGIAS DE LA
Fecha:
INFORMACION
octubre/2010
ANALISIS Y DESARROLLO DE SISTEMAS DE INFORMACION

(DATEDIFF(YEAR,BirthDate,GETDATE())- 60) as [Tiempo


Pensionado]
from Employees
where (DATEDIFF(YEAR,BirthDate,GETDATE()))>60
go
sp_Executesql Pensionados

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 ultimo, 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
sentencia; 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.

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 Northwind
go
Create procedure Prox_Pensiones
As
Select LastName, FirstName,
DATEDIFF(YEAR,BirthDate,GETDATE())
as Edad,
DATEDIFF(YEAR,HireDate,GETDATE())as [Tiempo Servicio],
(60
-DATEDIFF(YEAR,BirthDate,GETDATE()) ) as [Tiempo
Faltante]
From Employees
where
(DATEDIFF(YEAR,BirthDate,GETDATE()))
>=
55 and
Elaborado por: Instructora Sandra Yanneth Rueda Guevara
SENA - Área de Teleinformática
CENTRO DE GESTION DE MERCADOS LOGISTICA Y TECNOLOGIAS DE LA
Fecha:
INFORMACION
octubre/2010
ANALISIS Y DESARROLLO DE SISTEMAS DE INFORMACION

(DATEDIFF(YEAR,BirthDate,GETDATE())) <= 59 and


DATEDIFF(YEAR,HireDate,GETDATE()) >= 17
go
sp_executesql Prox_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 Northwind
Go
Create Procedure Reporte
as
select P.ProductName,P.UnitPrice, Avg (Od.UnitPrice) As
Prom_Precio,(P.UnitPrice - Avg (Od.UnitPrice)) as Diferencia
from Products P inner Join [Order Details] Od on P.ProductID
=
Od.ProductID
where Discontinued like 0
Group by P.ProductName,P.UnitPrice
Go
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] 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;
Elaborado por: Instructora Sandra Yanneth Rueda Guevara
SENA - Área de Teleinformática
CENTRO DE GESTION DE MERCADOS LOGISTICA Y TECNOLOGIAS DE LA
Fecha:
INFORMACION
octubre/2010
ANALISIS Y DESARROLLO DE SISTEMAS DE INFORMACION

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

Elaborado por: Instructora Sandra Yanneth Rueda Guevara


SENA - Área de Teleinformática
CENTRO DE GESTION DE MERCADOS LOGISTICA Y TECNOLOGIAS DE LA
Fecha:
INFORMACION
octubre/2010
ANALISIS Y DESARROLLO DE SISTEMAS DE INFORMACION

SET @diferencia = (select((SUM ((UnitPrice*Quantity)-


Discount))-
(selectSUM((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))

Elaborado por: Instructora Sandra Yanneth Rueda Guevara


SENA - Área de Teleinformática

You might also like