Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Cursores en SQLSERVER

Estas en el tema de Cursores en SQLSERVER en el foro de Bases de Datos General en Foros del Web. En c++ puedo hacer: for(i=0; i<x; i++) { for(j=0; j<x; j++) { codigo codigo } } es decir tener un for dentro de otro, y ...
  #1 (permalink)  
Antiguo 19/08/2005, 11:21
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Cursores en SQLSERVER

En c++ puedo hacer:

for(i=0; i<x; i++)
{
for(j=0; j<x; j++)
{
codigo
codigo
}
}

es decir tener un for dentro de otro, y tengo el siguiente procedure:

Cita:
CREATE procedure sp_Inicializa_Valores
as
declare @co_cuenta char(7)
declare @co_anio char(2)
BEGIN

DELETE FROM VALORES

DECLARE tblAnio_cursor CURSOR FOR
SELECT co_anio
FROM Anio

DECLARE tblCuentas_cursor CURSOR FOR
SELECT co_cuenta
FROM Cuentas

OPEN tblAnio_cursor
OPEN tblCuentas_cursor

FETCH NEXT FROM tblCuentas_cursor
INTO @co_cuenta

WHILE @@FETCH_STATUS = 0
BEGIN

FETCH NEXT FROM tblAnio_cursor
INTO @co_anio

WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO Valores VALUES
(@co_cuenta, @co_anio, 0, null, null)

FETCH NEXT FROM tblAnio_cursor
INTO @co_anio
END

FETCH NEXT FROM tblCuentas_cursor
INTO @co_cuenta
END
END
En el que necesito que por cada año ingresar todas las cuentas, no tengo mucha practica con cursores, pero si de la logica de la programación, me salen errores al ejecutarlo diciendo que el cursor ya está abierto. Si alguien me pudiera ayudar estaria agradecido.
  #2 (permalink)  
Antiguo 22/08/2005, 11:18
 
Fecha de Ingreso: agosto-2005
Mensajes: 12
Antigüedad: 18 años, 9 meses
Puntos: 0
Hola

Cuando trabajo con cursores anidados lo hago de la siguiente forma, teniendo en cuenta que las variables del cursor mas externo se usan para el interno, no se si es tu caso


CREATE procedure sp_Inicializa_Valores
as
declare @co_cuenta char(7)
declare @co_anio char(2)


DELETE FROM VALORES

DECLARE tblAnio_cursor CURSOR FOR
SELECT co_anio
FROM Anio
OPEN tblAnio_cursor
FETCH NEXT FROM tblAnio_cursor
INTO @co_anio
WHILE @@FETCH_STATUS = 0
BEGIN

DECLARE tblCuentas_cursor CURSOR FOR
SELECT co_cuenta
FROM Cuentas
OPEN tblCuentas_cursor
FETCH NEXT FROM tblCuentas_cursor
INTO @co_cuenta
WHILE @@FETCH_STATUS = 0
BEGIN

INSERT INTO Valores VALUES
(@co_cuenta, @co_anio, 0, null, null)


FETCH NEXT FROM tblCuentas_cursor
INTO @co_cuenta
END

FETCH NEXT FROM tblAnio_cursor
INTO @co_anio

END
  #3 (permalink)  
Antiguo 22/08/2005, 13:46
Avatar de Sir Matrix  
Fecha de Ingreso: octubre-2000
Ubicación: Dentro de mi cabeza. ono?
Mensajes: 1.264
Antigüedad: 23 años, 6 meses
Puntos: 3
aca hay un ejemplo de un cursor (muy simple)
http://www.webmagic.cl/rcursorsql.php

slds
__________________
|||| ))>_<(( ||||
www.webmagic.cl <-- esta pagina está mala, no la busquen
  #4 (permalink)  
Antiguo 23/08/2005, 20:04
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Gracias compañero adridiaz. Voy a probarlo, y gracias por la pagina Sir Matrix, tambien me voy a llevar ese ejemplo
  #5 (permalink)  
Antiguo 24/08/2005, 03:33
 
Fecha de Ingreso: agosto-2002
Mensajes: 230
Antigüedad: 21 años, 8 meses
Puntos: 1
No estoy seguro de como es en SQL Server, pero en Oracle tienes que cerrar el cursor antes de poder volver a abrirlo, mira a ver si van por ahi los tiros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:13.