Você está na página 1de 12

/*EJEMPLO 1: NAVENGANDO EN UN SELECT */

USE Northwind
GO
-- Declarando el cursor
DECLARE CursorNavegar CURSOR
FOR SELECT * FROM Clientes
-- Abrir el cursor
OPEN CursorNavegar
-- Navegar o lectura de registro por
registro de un Select
FETCH NEXT FROM CursorNavegar
-- Cerrar el cursor
CLOSE CursorNavegar
-- Liberar memoria del cursor
DEALLOCATE CursorNavegar
GO
/* EJEMPLO 2 DECLARANDO VARIABLES Y NAVENGANDO EN UN SELECT */
USE Northwind
GO
-- Declarando variables de memoria (varmen)
DECLARE @codigo varchar(5), @compañia varchar(200),
@contacto varchar(150), @pais varchar(100)
-- Declarando el cursor
DECLARE CursorClientes CURSOR
FOR SELECT IdCliente, NombreCompañía, NombreContacto, País
FROM Clientes
OPEN CursorClientes
FETCH CursorClientes INTO @codigo, @compañia, @contacto, @pais
WHILE (@@FETCH_STATUS = 0)
BEGIN
PRINT @codigo+' '+@compañia+' '+@contacto+' '+@pais
FETCH CursorClientes INTO @codigo, @compañia, @contacto, @pais
END
CLOSE CursorClientes
DEALLOCATE CursorClientes
GO
/* EJEMPLO 3: DECLARANDO VARIABLES, NAVENGANDO EN UN SELECT Y ACTUALIZANDO DATOS EN UNA
TABLA (usamos el cursor anterior del ejemplo 2) */
-- Declarando variables de memoria (varmen)
DECLARE @codigo varchar(5), /compañia varchar(200),
@contacto varchar(150), @pais varchar(100)
-- Declarando el cursor
DECLARE CursorClientes CURSOR
FOR SELECT IdCliente, NombreCompañía, NombreContacto, País
FROM Clientes FOR UPDATE
OPEN CursorClientes
FETCH CursorClientes INTO @codigo, @compañia, @contacto, @pais
WHILE (@@FETCH_STATUS = 0)
BEGIN
UPDATE Clientes
SET Prueba = '-Modificado' -- @compañia + '-Modificado’
FETCH CursorClientes INTO @codigo, @compañia, @contacto, @pais
END
CLOSE CursorClientes
DEALLOCATE CursorClientes
GO
/* EJEMPLO 4: Desarrollar un cursor que permita mostrar el código, ruc del cliente,
monto de la venta y mora:
Si es menos de 200 soles será del 10% de la deuda
Si es mayor igual a 200 y menos de 1000, será del 15% de la deuda.
Si es mayor a 1000 será del 20% de la deuda */
USE VENTASCIB
GO
-- Mostrar las tablas de la BD: bdVentas2017
SELECT * FROM sys.tables
GO
-- Mostrar todos los registros de la tabla: TB_CLIENTE
SELECT * FROM TB_CLIENTE
GO
-- Mostrar todos los registros de la tabla: TB_FACTURA
SELECT * FROM TB_FACTURA
GO
-- Mostrar todos los registros de la tabla: TB_DETALLE_FACTURA
SELECT * FROM TB_DETALLE_FACTURA
GO
-- Desarrollo del cursor
DECLARE CursorDeudas CURSOR
FOR SELECTC.COD_CLI, C.RUC_CLI, SUM(DF.CAN_VEN * DF.PRE_VEN) AS Deuda
FROM TB_CLIENTE C JOIN TB_FACTURA F
ON C.CODCLI = F.CODCLI
INNER JOIN TB_DETALLE_FACTURA DF
ON F.NUM_FAC = DF.NUM_FAC
WHERE F.EST_FAC = 2
GROUP BY C.COD_CLI, C.RUC_CLI

-- Declaración de variable de cursor


PRINT space(5) + 'Reporte de deudas y moras'
PRINT replicate('=',60)
PRINT space(5) + 'CodCli' + space(5) + 'RucCli'+ space(5) + 'Deuda'+ space(5) + 'Mora'
PRINT replicate('=',60)
DECLARE @vc_codcli char(4), @vc_ruccli char(12), @vc_deuda smallmoney
OPEN CursorDeudas
FETCH CursorDeudas
INTO @vc_codcli, @vc_ruccli, @vc_deuda
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @v_mora smallmoney
IF @vc_deuda < 200
SET @v_mora = @vc_deuda * 0.10
ELSE IF @vc_deuda >= 200 AND @vc_deuda < 1000
SET @v_mora = @vc_deuda * 0.15
ELSE
SET @v_mora = @vc_deuda * 0.20
PRINT @vc_codcli + space(5) + @vc_ruccli + space(5) + str(@vc_deuda)
+ space(5) + str(@v_mora)
FETCH CursorDeudas
INTO @vc_codcli, @vc_ruccli, @vc_deuda
END
CLOSE CursorDeudas
DEALLOCATE CursorDeudas
GO
-- Creamos y ejecutamos el cursor, este cursor nos permite llenar el campo eMail
-- Declaramos parámetros
DECLARE @Id int, @Nom varchar(50), @Ape varchar(50)
-- Declaramos el cursor
DECLARE MyCursor SCROLL CURSOR FOR
SELECT Id, Nombre, Apellido FROM tbEmpleado
OPEN MyCursor
FETCH NEXT FROM MyCursor into @Id, @Nom, @Ape
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE tbEmpleado
SET eMail = LOWER(SUBSTRING(@Nom,1,1) + @Ape + '@midominio.com’)
WHERE Id = @Id
FETCH NEXT FROM MyCursor into @Id, @Nom, @Ape
END
CLOSE MyCursor
DEALLOCATE MyCursor
GO