¿Para qué sirven los cursores SQL?

Para debatir interrogar o exponer cualquier duda o sugerencia sobre el curso SQL desde cero.

¿Para qué sirven los cursores SQL?

Notapor FranStoker » Mar May 03, 2016 6:11 pm

Buenas, estamos estudiando este tema en clase, pero por más que lo intento, no consigo verle la utilidad. ¿Podéis darme un ejemplo de qué puedo hacer y qué no con cursores? Porque el tema de devolver varias filas y procesarlas una a una, no lo pillo... es decir, yo puedo devolver varias filas con una consulta normal, y no veo para qué podría servirme procesar fila por fila.

Muachas gracias.
FranStoker
 
Mensajes: 9
Registrado: Dom Jul 12, 2015 11:53 pm

Re: ¿Para qué sirven los cursores SQL?

Notapor Pere » Sab May 14, 2016 10:05 am

Hola,

Los cursores son un recurso más que ofrecen algunos SGBD como parte del set de instrucciones que se pueden usar en procedimientos almacenados.

Yo personalmente pienso que son de gran utilidad para el procesamiento registro a registro del resultado de una consulta. El porque hacerlo mediante un cursor y no directamente sobre una consulta depende fundamentalmente de la naturaleza del problema(no todo es solucionable en una consulta), de las preferencias del desarrollador, de problemas de rendimiento, de preferir un código mejor estructurado, etc...

Voy a inventar un ejemplo. Si queremos sumar a un campo de tabla una constante obviamente no es necesario un cursor, ya que podemos hacerlo con una instrucción de update muchos mas facilmente y también serà mas eficiente, pero si imaginamos que queremos calcular como afecta la fuerza gravitacional del conjunto de planetas a cada uno de los planetas del sistema solar, además de la distancia con respecto a los otros en un momento del tiempo dado etc.., entonces lo más práctico quizás sea desarrollar las funciones que realizan estos cálculos e ir llamándolas para cada planeta con ayuda de un cursor.

en oracle:
Código: Seleccionar todo

declare 
   cursor planetas is
      select id_planeta from planetas
;
begin
   for planeta in planetas loop
      actualizar_fuerzas_gravitacionales
(planeta.id_planeta);
      actualizar_distancias(planeta.id_planeta);
     ....
   end loop;
end;


Existen muchas aplicaciones para los cursores, pero no podemos cometer el error de usarlos para todo.

Espero os sirva.
Pere
 
Mensajes: 68
Registrado: Mar Feb 02, 2010 9:44 pm


Volver a Soporte SQL desde cero

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados