4. Crear un nuevo procedimiento parecido al anterior pero que nos devuelva también el número de oficinas recuperadas. Sin utilizar parámetros de salida
PRINT 'Empieza el ejercicio 4'
USE Gestion10
IF OBJECT_ID('Listado_Oficinas3','P') IS NOT NULL DROP PROCEDURE Listado_Oficinas3
GO
CREATE PROCEDURE Listado_Oficinas3 @region CHAR(20),@ventas MONEY
AS
SELECT * FROM oficinas WHERE region= @region AND ventas > @ventas
RETURN (SELECT COUNT(*) FROM oficinas WHERE region= @region AND ventas > @ventas)
GO
DECLARE @resultado INT
EXEC @resultado=Listado_Oficinas3 Este, 1000
SELECT @resultado
EXEC @resultado=Listado_Oficinas3 Este, 100000
PRINT @resultado
EXEC @resultado=Listado_Oficinas3 Norte, 0
PRINT @resultado
EXEC @resultado=Listado_Oficinas3 Norte, 10000
PRINT @resultado
5. Crea un procedimiento que muestre los n productos más caros, n es un valor que se indicará en la llamada.
PRINT 'Empieza el ejercicio 5'
USE Gestion10
IF OBJECT_ID('ProductosMasCaros','P') IS NOT NULL DROP PROC ProductosMasCaros
GO
CREATE PROCEDURE ProductosMasCaros @num int
AS
SELECT TOP (@num) Idproducto,idfab,descripcion,precio
FROM Productos
ORDER BY Precio DESC;
GO
EXEC ProductosMasCaros 5
EXEC ProductosMasCaros 10
6. Crear otro procedimiento que muestre los n productos más caros con empates y nos devuelva cuántos hay.
PRINT 'Empieza el ejercicio 6'
USE Gestion10
IF OBJECT_ID('ProductosMasCaros2','P') IS NOT NULL DROP PROC ProductosMasCaros2
GO
CREATE PROCEDURE ProductosMasCaros2 @num int
AS
SELECT TOP (@num) WITH TIES Idproducto,idfab,descripcion,precio
FROM Productos
ORDER BY Precio DESC;
RETURN @@ROWCOUNT -- variable del sistema que devuelve el número de filas de la última operación.
DECLARE @resul INT
EXEC @resul=ProductosMasCaros2 13
SELECT @resul AS Resultado
EXEC @resul=ProductosMasCaros2 10
SELECT @resul AS Resultado
7. No dejar eliminar productos que tengan existencias.
PRINT 'Empieza el ejercicio 7'
USE Gestion10
IF OBJECT_ID('Controlexistencias','P') IS NOT NULL DROP PROC Controlexistencias
GO
CREATE TRIGGER Controlexistencias
ON Productos INSTEAD OF DELETE -- Tenemos que comprobar el stock antes de que se realice el borrado
AS
BEGIN
DELETE Productos
FROM Productos P INNER JOIN Deleted D ON P.idfab=D.idfab AND P.idproducto=D.idproducto
-- Aquí hay que utilizar alias de tablas porque los campos se llaman igual en las 2 tablas
WHERE D.existencias <= 0
-- Si existencias > 0 el producto tiene stock, no se borra.
END;
GO
SELECT 'Antes',* FROM productos WHERE idfab='bic' AND idproducto=41003; -- Para comprobar las existencias del producto
DELETE Productos WHERE idfab='bic' AND idproducto=41003; -- un producto que tenga existencias
-- Intentamos borrar el producto.
SELECT 'Después DELETE',* FROM productos WHERE idfab='bic' AND idproducto=41003;
-- Comprobamos que el producto sigue en la tabla
DELETE Productos WHERE idfab='bic' AND idproducto=41672; -- un producto que no tiene stock (existencias=0)
-- Intentamos borrar el producto.
SELECT 'Después DELETE',* FROM productos WHERE idfab='bic' AND idproducto=41672;
-- Comprobamos que el producto ya no está en la tabla
Síguenos en: Facebook Sobre aulaClic Política de Cookies
© aulaClic. Todos los derechos reservados. Prohibida la reproducción por cualquier medio.