Ayuda ejercicios unidad 9: Programación en TRANSACT SQL (II)


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 

Atrás  Inicio  Adelante





Página inicial  Cursos Informática Gratuitos

Síguenos en:   Facebook       Sobre aulaClic            Política de Cookies


© aulaClic. Todos los derechos reservados. Prohibida la reproducción por cualquier medio.