Sei sulla pagina 1di 5

CENTRO DE GESTION DE MERCADOS LOGISTICA Y TECNOLOGIAS DE LA

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

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 TERMINAL2
go
create procedure Consultar_Direcion
As
Select top 1 co_nombconduc,c.co_codiconduc, co_direconduc, count
(vi_numrecorr) as num_viajes
From Conductores c inner join Viajes v on c.co_codiconduc=v.vi_codiconduc
Group by c.co_codiconduc, co_direconduc,co_nombconduc
Go

sp_executesql Consultar_Direcion

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

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 TERMINAL2
Go
Create procedure Consultar
As
Select b.bu_placa,bu_fechfabri,count (vi_numrecorr) as num_viajes
From Buses b inner join Viajes v on b.bu_placa=v.vi_placa
Where YEAR (bu_fechfabri)<1995
Group by b.bu_placa,bu_fechfabri
Having count (vi_numrecorr) >60
Go
sp_executesql Consultar

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.

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.

Use Northwind
Go
Create procedure Consultar_empleados
As
Select LastName,FirstName, DATEDIFF(YEAR,BirthDate,GETDATE()) as
Años
From Employees
Where DATEDIFF(YEAR,BirthDate,GETDATE())>60
Go
sp_executesql Consultar_empleados

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

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 Consultar_empleadosp
As
Select LastName, FirstName, DATEDIFF(YEAR,HireDate,GETDATE()) as
años_en_empresa,
DATEDIFF (YEAR,BirthDate,GETDATE()) as Años_empleado,
60-DATEDIFF (YEAR,BirthDate,GETDATE()) as Años_restantes
From Employees
where DATEDIFF(YEAR,BirthDate,GETDATE())>= 55 and
DATEDIFF(YEAR,BirthDate,GETDATE())<=59
Go

sp_executesql Consultar_empleadosp

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 product
As
Select ProductName,UnitPrice,AVG(UnitPrice) as
Promedio_Ventas,(UnitPrice-AVG(UnitPrice)) as
Diferencia,Discontinued
From Products
where Discontinued=1
group by ProductName,UnitPrice,Discontinued
Go
sp_executesql product

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

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
@codig int,
@ventas_ano money ,
@Diferencia money

SET @codig = ''


SET @ventas_ano = (
SELECT SUM(Quantity*UnitPrice)
FROM Orders O inner join [order Details] OD
ON O.OrderID = OD.OrderID
WHERE EmployeeID = @codig and @codig=8 and year
(OrderDate)=1997 )
PRINT ('Total de compras:'+ STR(@ventas_ano))
PRINT ('La diferencia entre el total vendido menos lo vendido en
1997 es:'+ STR(@Diferencia))

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

Elaborado por: Instructora Sandra Yanneth Rueda Guevara


SENA - Área de Teleinformática

Potrebbero piacerti anche