PDA

Ver la Versión Completa : Cursor Abierto


lucasarts_18
01-09-2005, 23:27:04
Hola a todos:

Tengo un problema que siempre me ha ocurrido con SQL Server con referente a los cursores..
Me refiero que cuando un Procedimiento almacenado no termina de ejecutarse por algún motivo (Error) el cursor queda abierto, y cuando llamo de nuevo al procedimiento almacenado me dice que el cursor está abierto..


Espero sus ayudas o sugerencias.
Saludos..

delphi.com.ar
02-09-2005, 15:20:13
Lo he visto, me ha sucedido y por suerte siempre en desarrollo. Así que solo he bajado y subido el motor, porque una simple búsqueda por su horrorosa ayuda, no me trajo ningún resultado.

Saludos!

lucasarts_18
02-09-2005, 19:46:05
Lo he visto, me ha sucedido y por suerte siempre en desarrollo. Así que solo he bajado y subido el motor
Hola:

Sí, al parecer no hay otra solución, y quiero corregir algo del primer post que mande...no es que el cursor esté abierto sino que el mensaje que me da es que el cursor ya existe...

Quizás esto cambie las cosas, pero lo dudo, debe ser muy parecido a lo del cursor abierto..

Saludos.

Xianto
03-09-2005, 12:11:39
Buenas...
Nunca se me ha dado este error, pero hay algunos sitios donde hablan de el y en el 90% de los casos no es por un problema del servidor.


IF Cursor_Status('variable', '@pepe_cursor') < 0
DEALLOCATE @pepe_cursor
ELSE
... abro el cursor y demas ...


De la Ayuda del SQL:



CURSOR_STATUS
(
{ 'local' , 'cursor_name' }
| { 'global' , 'cursor_name' }
| { 'variable' , 'cursor_variable' }
)

Argumentos

'local'
Especifica una constante que indica que el origen del cursor es un nombre local de cursor.

'cursor_name'
Es el nombre del cursor. Un nombre de cursor debe ajustarse a las reglas para los identificadores.

'global'
Especifica una constante que indica que el origen del cursor es un nombre global de cursor.

'variable'
Especifica una constante que indica que el origen del cursor es una variable local.

'cursor_variable'
Es el nombre de la variable de cursor. Una variable de cursor debe definirse mediante el tipo de datos cursor.

Tipos devueltos
smallint

1 = El conjunto de resultados del cursor tiene al menos una fila y:
Para los cursores de conjuntos de claves y que no distinguen, el conjunto de resultados tiene al menos una fila.
Para los cursores dinámicos, el conjunto de resultados puede tener cero, una o más filas.

0 = El conjunto de resultados del cursor está vacío.*

-1 = El cursor está cerrado.

-2 = No aplicable.

-3 = No existe ningún cursor con el nombre indicado.

lucasarts_18
05-09-2005, 22:54:49
Hola:

Federico, no sé si será esto o no, pero últimamente he estado poniendo después del close la instrucción deallocate y, ahora no me ha pasado lo del mensaje diciéndome que el cursor existe...:D

Saludos.