Diferencia entre revisiones de «Cursor (base de datos)»

Contenido eliminado Contenido añadido
m enlaces
Línea 1:
En [[bases de datos]], el término '''cursor''' se refiere a una estructura de control utilizada para el recorrido (y potencial procesamiento) de los [[registro|registros]] del resultado de una '''consulta'''.
 
Un cursor se utiliza para el procesamiento individual de las [[fila (base de datos)|filas]] devueltas por el [[sistema gestor de base de datos]] para una consulta. Es necesario debido a que muchos lenguajes de programación sufren de lo que en inglés se conoce como '''impedance mismatch'''. Por norma general los lenguajes de programación son procedurales y no disponen de ningún mecanismo para manipular conjuntos de datos en una sola instrucción. Debido a ello, las filas deben ser procesadas de forma secuencial por la aplicación. Un cursor puede verse como un [[iterador]] sobre la colección de filas que habrá en el set de resultados.
 
Existen sentencias [[SQL]] que no requieren del uso de cursores. Ello incluye la sentencia [[SQL#INSERT|Insert]], así como la mayoría de formas del [[Sentencia Update|Update]] o el [[Sentencia Delete|Delete]]. Incluso una sentencia [[Sentencia Select|Select]] puede no requerir un cursor si se utiliza en la variante de ''SELECT...INTO'', ya que esta variante sólo devuelve una fila.
Línea 54:
DECLARE ''cursor_name'' CURSOR '''WITH HOLD''' FOR SELECT ... FROM ...
 
Cuando se ejecuta un COMMIT, el cursor WITH HOLD se posiciona ''antes'' de la siguiente fila o [[registro (base de datos)|registro]]. Por lo tanto, una operación UPDATE o DELETE posicionada sólo funcionará después de haber realizado primero un FETCH en la misma transacción.
 
Tomese nota de que JDBC define los cursores como WITH HOLD por defecto. Esto se hace porque JDBC activa la opción de '''auto-commit''' por defecto. Debido a la sobrecarga habitual relacionada con el auto-commit y los cursores WITH HOLD, ambos deberían estar explícitamente desactivados en el nivel de conexión.
Línea 60:
=== Sentencias Update/Delete posicionadas ===
 
Los cursores no sólo pueden ser utilizados para extraer información de la base de datos a una aplicación, sino que también sirven para identificar una fila a modificar o borrar en una [[tabla (base de datos)|tabla]]. El estándar [[SQL:2003]] define para tal fin las sentencias '''posicionadas Update y Delete '''. Estas sentencias no utilizan una cláusula WHERE normal (con predicados de condición). En cambio, el cursor identifica la fila, para lo cual debe ser abierto y posicionado en la misma utilizando la sentencia <code> FETCH </code>.
 
UPDATE ''table_name''