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
-------- --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.
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?