lunes, 26 de septiembre de 2011

[INF-272] PROYECTO : Cursores

--****************************
--CURSORES********************
--****************************

--1.- MEDIANTE CURSORES DETERMINAR LA COMANDA QUE TIENE MAS PRODUCTOS
ALTER PROCEDURE SPC1
AS
BEGIN
    DECLARE @CONT_MAX INTEGER
    DECLARE @RES INTEGER
    DECLARE @IDC INTEGER
    DECLARE @CONT INTEGER
    SET @CONT_MAX=-1
    DECLARE CUR1 CURSOR
    FOR
        SELECT ID_COMANDA, COUNT(ID_COMANDA) AS CANTIDAD
        FROM LINEA_PEDIDO
        GROUP BY ID_COMANDA
   
    OPEN CUR1
    FETCH CUR1 INTO @IDC,@CONT
    WHILE(@@FETCH_STATUS =0)
    BEGIN
        IF (@CONT>@CONT_MAX)
        BEGIN
            SET @CONT_MAX=@CONT   
            SET @RES= @IDC
        END
        FETCH CUR1 INTO @IDC, @CONT
    END
    IF @RES!= NULL BEGIN
    PRINT 'LA COMANDA COM MAS  PRODUCTOS ES : '
    PRINT CAST (@RES AS VARCHAR)
    END
    ELSE
    BEGIN
        PRINT 'NO EXISTEN COMANDAS'
    END
    CLOSE CUR1
    DEALLOCATE  CUR1
END
EXEC SPC1

--2.- MEDIANTE CURSORES DETERMINAR EN CUANTOS CONTRATOS PARTICIPO EL CLIENTE
--DE NOMBRE X
ALTER PROCEDURE SPC2 @XNOMBRE AS VARCHAR(255)
AS
BEGIN
    DECLARE @IDCLIENTE INTEGER
    DECLARE @ID_AUX INTEGER
    DECLARE @CONT INTEGER
    SET @CONT=0
    SET @IDCLIENTE =DBO.OBT_ID(@XNOMBRE)
    DECLARE CUR2 CURSOR
    FOR
        SELECT ID_CLIENTE FROM CONTRATOS
    OPEN CUR2
    FETCH CUR2 INTO @ID_AUX
    WHILE (@@FETCH_STATUS =0)
    BEGIN
        IF (@ID_AUX=@IDCLIENTE)
            SET @CONT=@CONT+1
        FETCH CUR2 INTO @ID_AUX
    END     
    PRINT 'CONTRATOS REALIZADOS: '+CAST (@CONT AS VARCHAR)   
    CLOSE CUR2
    DEALLOCATE CUR2
END
EXEC SPC2 'JUAN pEREZ'
CREATE FUNCTION OBT_ID (@NOMBRE VARCHAR(255))
RETURNS INTEGER
BEGIN
    DECLARE @ID INTEGER
    SET  @ID= (SELECT ID_CLIENTE FROM CLIENTES
                WHERE NOMBRE = @NOMBRE)
    RETURN @ID
END


No hay comentarios:

Publicar un comentario