Página 1 de 1

¿Para qué sirven los cursores SQL?

NotaPublicado: Mar May 03, 2016 6:11 pm
por FranStoker
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.

Re: ¿Para qué sirven los cursores SQL?

NotaPublicado: Sab May 14, 2016 10:05 am
por Pere
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.