RE:Se puede trabajar sin cursores??
Publicado por
MARTIN (1 intervención) el 20/01/2006 22:41:31
AQUI VA UNO DE LOS TANTOS QUE TENGO.....
el proces consiste en pasar datos de una base a otra (de AGENCIA A FINANC, EL DETALLE ES QUE CADA REGISTRO DE LA TABLA DEPOSITO DE LA BD AGENCIA , SE VA EVALUANDO PARA SABER DE QUE TIPO ES Y PODER HACER UN UPDATE A LA TABLA AHORRO DEL BASE DE DATOS FINANC.
ESTE ES UN EJEMLO ES SENCILLO., POR QUE EN OTROS CASO HAY QUE HACER CALCULOS Y/O OPERACIONES. .
QUEIRO VER QUE SE PUEDE HACER AHI..
CREATE PROCEDURE MIGRA_AHORRO_ACTUALIZA_RET
(@AGE CHAR(2))
AS
DECLARE @DEPOSITO_INT INT,@DEPOSITO_SEC NUMERIC
DECLARE @NRO INT,@NRO_FAM CHAR(2),@FECHA_NAC SMALLDATETIME
DECLARE @DEPOSITO_FEC CHAR(10),@DEPOSITO_TIP NUMERIC,@DEPOSITO_IMP NUMERIC(12,2)
---SE RRECORRE UNA BASE DA DATOS LLAMADA AGENCIA Y NECESITO PASAR REGISTRO POR REGISTRO DESDE LA TABLA DEPOSITO
---PARA HACER UN UPDATE.EN ESTE CASO.
DECLARE CURS_AH CURSOR FOR
SELECT DEPOSITO_CLA,DEPOSITO_MON,DEPOSITO_SEC,DEPOSITO_TIP,DEPOSITO_VTO,DEPOSITO_IMP FROM AGENCIA.DBO.DEPOSITO
WHERE DEPOSITO_IMP>0
OPEN CURS_AH
FETCH NEXT FROM CURS_AH
INTO @DEPOSITO_CLA,@DEPOSITO_MON,@DEPOSITO_SEC,@DEPOSITO_TIP,@DEPOSITO_VTO,@DEPOSITO_IMP
While @@fetch_status = 0
BEGIN
IF @DEPOSITO_MON=0 ---SI ES 0 ES MONEDA SOLES
SET @SUBTIPO_AHO='101' --POR TANTO ES DE TIPO 101
IF @DEPOSITO_MON=1 --SI ES 1 ES DOLARES
SET @SUBTIPO_AHO='201' --`POR TANTO ES DE TIPO 201
IF @DEPOSITO_cla=1 --
BEGIN
IF @DEPOSITO_SOC>0
SET @CUENTA=@COOPAC+ @AGE +(RIGHT('0000000'+ ltrim(cast (@DEPOSITO_SOC as char(6))),7))
SET @TIPO_AHO='02'
END
IF @DEPOSITO_cla=2
BEGIN
SET @TIPO_AHO='03'
IF @DEPOSITO_SOC>0
SET @CUENTA=@COOPAC+ @AGE +(RIGHT('0000000'+ ltrim(cast(@DEPOSITO_SOC as char(6))),7))
END
SET @CTA_AHO ='002'+ @AGE +(RIGHT('0000000'+ LTRIM(STR(@DEPOSITO_SEC)),7))
SET @SALDO_CONGE=@DEPOSITO_IMP
--------ACTUALIZA LOS SALDO CONGELADOS DE LOS AHORROS
UPDATE FINANC.DBO.AHORRO
SET SALDO_CONGE=@SALDO_CONGE
WHERE CTA_AHO=@CTA_AHO AND TIPO_AHO=@TIPO_AHO AND SUBTIPO_AHO=@SUBTIPO_AHO
------------------------------
FETCH NEXT FROM CURS_AH
INTO @DEPOSITO_CLA,@DEPOSITO_MON,@DEPOSITO_SEC,@DEPOSITO_TIP,@DEPOSITO_VTO,@DEPOSITO_IMP
END
Close CURS_AH
Deallocate CURS_AH
/*
DECLARE @AGE CHAR(2)
SET @AGE ='04'
EXEC MIGRA_AHORRO_ACTUALIZA_RET @AGE
/*
ESPERO QUE ESTE CLARO....
GRACIAS POR LA AYUDA.. AL MENOS LOQ UE QUIERO ES QUE ME DEN UNAS PAUTAS QUE CON ESO ME SERVIRA DE MUCHO EN EL FUTURO.
POR CIERTO EN LA TABLA ORIGEN HAY MAS DE 1000 REGISTROS
MARTIN Y.