Você está na página 1de 4

Universidad Nacional del Altiplano Escuela Profesional de Ingeniera de Sistemas

Ing William E. Arcaya C.


wearcaya@hotmail.com
GESTION DE BASES DE DATOS
Prctica dirigida : Creacin de procedimientos almacenados
Ejercicio de introduccin
A.- Con la base de datos Northwind activa, abra una nueva consulta, luego cree el siguiente
procecimiento almacenado.
USE Northwind
go

Create Procedure up_CalcFactorial
@inyN tinyint,
@iFactorial bigint OUTPUT
As

Set @iFactorial = 1

while @inyN > 1
begin
set @iFactorial = @iFactorial * @inyN
Set @inyN = @inyN - 1
end

return 0
--------
go
--para ejecutar

DECLARE @rta bigint, @param tinyint
SELECT @param = 0
WHILE(@param <=20)
BEGIN
EXEC up_CalcFactorial @param, @rta OUTPUT
PRINT CONVERT(varchar, @param)+'! = '--(cambie PRINT por SELECT)
+ CONVERT(varchar(45),@rta)
SELECT @param =@param + 1
END

--------
--para eleiminar el proc. almacenado
drop proc up_CalcFactorial

B.- Implemente un procedimiento almacenado para la serie Fibonacci.
Ejercicio 1.
1.- Compruebe que est usando la base de datos Northwind.
2.- Escriba una consulta con la tabla Products que enumere slo el nombre del producto y el precio
por unidad. Limite las filas devueltas a los cinco productos ms caros y ordene el conjunto de
resultados por el precio por unidad.
3.- Pruebe la consulta para asegurar que devuelve el conjunto de resultados esperado.
4.- Modifique la consulta para crear un procedimiento almacenado llamado
CincoMasCarosProductos.
5.- Guarde la secuencia de comandos como CincoMasCarosProductos.sql.
6.- Ejecute el procedimiento almacenado para comprobar que funciona como estaba previsto.
Cules son los cinco productos ms caros?
Universidad Nacional del Altiplano Escuela Profesional de Ingeniera de Sistemas

Ing William E. Arcaya C.
wearcaya@hotmail.com

Respuesta
Solucin:
use northwind
go
CREATE PROCEDURE CincoMasCarosProductos
AS
SELECT TOP 5 ProductName, UnitPrice FROM Products ORDER BY UnitPrice desc
GO
--para ejecutar
exec CincoMasCarosProductos

--drop proc CincoMasCarosProductos
Ejercicio 2.
1.- Cree un procedimiento almacenado que actualice el nmero de telfono de un empleado. El nmero de
telfono est almacenado en la tabla Employees. Seleccione la accin Actualizar para la tabla Employees.
2.- Denomine ActualizaTelDeEmpleado al procedimiento almacenado.
3.- Incluya slo la columna HomePhone en la clusula SET y slo EmployeeID en la clusula WHERE.
4.- Ejecute el procedimiento almacenado ActualizaTelDeEmpleado para comprobar que funciona como
se esperaba. Actualice el nmero de telfono a (503) 555-1212 para el empleado Nancy Davolio, cuyo
EmployeeID es 1.

EXEC ActualizaTelDeEmpleado
@EmployeeID_1 = 1,
@HomePhone_2 = '(503)555-1212'

Solucin:
CREATE PROCEDURE [ActualizaTelDeEmpleado]
(@EmployeeID_1 [int],
@HomePhone_2 [nvarchar](24))
AS
UPDATE [Northwind].[dbo].[Employees]
SET [HomePhone] = @HomePhone_2
WHERE [EmployeeID] = @EmployeeID_1
GO

Ejercicio 3.
Utilizacin del control de errores en procedimientos almacenados
1.- Ejecute la secuencia de comandos para crear el procedimiento almacenado
ProveedorProductInsert.
CREATE PROCEDURE ProveedorProductInsert
@CompanyName nvarchar (40) = NULL,
@ContactName nvarchar (40) = NULL,
@ContactTitle nvarchar (40)= NULL,
@Address nvarchar (60) = NULL,
@City nvarchar (15) = NULL,
@Region nvarchar (40) = NULL,
@PostalCode nvarchar (10) = NULL,
@Country nvarchar (15) = NULL,
@Phone nvarchar (24) = NULL,
@Fax nvarchar (24) = NULL,
@HomePage ntext = NULL,
@ProductName nvarchar (40) = NULL,
@CategoryID int = NULL,
@QuantityPerUnit nvarchar (20) = NULL,
@UnitPrice money = NULL,
Universidad Nacional del Altiplano Escuela Profesional de Ingeniera de Sistemas

Ing William E. Arcaya C.
wearcaya@hotmail.com
@UnitsInStock smallint = NULL,
@UnitsOnOrder smallint = NULL,
@ReorderLevel smallint = NULL,
@Discontinued bit = NULL
AS
IF @CompanyName IS NULL OR
@ContactName IS NULL OR
@Address IS NULL OR
@City IS NULL OR
@Region IS NULL OR
@PostalCode IS NULL OR
@Country IS NULL OR
@Phone IS NULL OR
@ProductName IS NULL OR
@CategoryID IS NULL OR
@QuantityPerUnit IS NULL OR
@Discontinued IS NULL
BEGIN
PRINT 'Debe proporcionar el nombre de la compaa y del contacto,
direccin, ciudad'
PRINT 'regin, cdigo postal, pas, telfono, nombre de producto y
discontinuidad.'
PRINT '(ttulo del contacto, fax, pgina principal, precio de la unidad,
unidades en almacn
Units on Order and Reorder Level can be null.)'
RETURN
END



BEGIN TRANSACTION
INSERT Suppliers (
CompanyName,
ContactName,
Address,
City,
Region,
PostalCode,
Country,
Phone)
VALUES (
@CompanyName,
@ContactName,
@Address,
@City,
@Region,
@PostalCode,
@Country,
@Phone)
IF @@error <> 0
BEGIN
ROLLBACK TRAN
RETURN
END
DECLARE @InsertSupplierID int
SELECT @InsertSupplierID=@@identity
INSERT Products (
ProductName,
SupplierID,
CategoryID,
QuantityPerUnit,
Universidad Nacional del Altiplano Escuela Profesional de Ingeniera de Sistemas

Ing William E. Arcaya C.
wearcaya@hotmail.com
Discontinued)
VALUES (
@ProductName,
@InsertSupplierID,
@CategoryID,
@QuantityPerUnit,
@Discontinued)
IF @@error <> 0
BEGIN
ROLLBACK TRAN
RETURN
END
PRINT '*** Se agreg un nuevo producto y un nuevo proveedor *** '

COMMIT TRANSACTION
GO
2.- Ejecute la secuencia de comandos modificada.
EXEC ProveedorProductInsert
@CompanyName = 'New Company',
@ContactName = 'New Contact Name',
@Address = 'New Address',
@City = 'New City',
@Region = 'New Region',
@PostalCode = 'New Postal Code',
@Country = 'New Country',
@Phone = 'New Phone',
@ProductName = 'New Product',
@CategoryID = '1',
@QuantityPerUnit = '1',
@UnitPrice = 1,
@Discontinued = 0
3.- Pruebe el control de errores del procedimiento almacenado ProveedorProductInsert; para ello,
modifique los valores y coloque un comentario en la lnea del parmetro @contactname. Ejecute la
secuencia modificada para asegurar que el valor se pasar por alto.
Qu mensaje de error recibe?

Você também pode gostar