Recopilar y desplazar
La operación que consiste en recuperar una fila de un cursor recibe el nombre de recopilación. Éstas son las opciones de recopilación:
- FETCH FIRST
Recopila la primera fila del cursor. - FETCH NEXT
Recopila la fila siguiente a la última fila recopilada. - FETCH PRIOR
Recopila la fila anterior a la última fila recopilada. - FETCH LAST
Recopila la última fila del cursor. - FETCH ABSOLUTE n
Recopila la enésima fila a partir de la primera fila del cursor, si n es un entero positivo. Si n es un entero negativo, se recopila la fila que está n filas antes del final del cursor. Si n es 0, no se recopila ninguna fila. - FETCH RELATIVE n
Recopila la fila que está n filas después de la última fila recopilada. Si n es positivo, se recopila la fila que está n filas después de la última fila recopilada. Si n es negativo, se recopila la fila que está n filas antes de la última fila recopilada. Si n es 0, se vuelve a recopilar la misma fila.
Cuando se abre un cursor, la posición de la fila actual del cursor está lógicamente delante de la primera fila. Esto hace que las diferentes opciones de recopilación tengan el siguiente comportamiento cuando pasan a ser la primera recopilación que se realiza tras abrir el cursor:
- FETCH FIRST
Recopila la primera fila del cursor. - FETCH NEXT
Recopila la primera fila del cursor. - FETCH PRIOR
No recopila una fila. - FETCH LAST
Recopila la última fila del cursor. - FETCH ABSOLUTE n
Recopila la enésima fila a partir de la primera fila del cursor, si n es un entero positivo. Si n es un entero negativo, se recopila la fila que está n filas delante del final del cursor (por ejemplo, n = -1 devuelve la última fila del cursor). Si n es 0, no se recopila ninguna fila. - FETCH RELATIVE n
Recopila la enésima fila del cursor, si n es positivo. No se recopila ninguna fila si n es negativo o 0.
Los cursores de Transact-SQL están limitados a recopilar una fila cada vez. Los cursores de servidor de la API admiten la recopilación de bloques de filas en cada recopilación. Un cursor que admite la recopilación de varias filas a la vez recibe el nombre de cursor de bloque.
Clasificaciones de cursores
Un cursor se puede clasificar por las opciones de recopilación que admite:
- Sólo hacia adelante
Las filas se deben recopilar en serie, desde la primera a la última fila. FETCH NEXT es la única operación de recopilación permitida. - Desplazable
Las filas se pueden recopilar aleatoriamente desde cualquier posición del cursor. Se permiten todas las operaciones de recopilación (a excepción de los cursores dinámicos que no admiten la recopilación absoluta).
Los cursores desplazables son especialmente útiles para las aplicaciones en pantalla. Se puede asignar un cursor a una cuadrícula o cuadro de lista de la aplicación. A medida que el usuario se desplaza por toda la cuadrícula, la aplicación utiliza recopilaciones de desplazamiento para recuperar las filas del cursor que desea ver el usuario.
API para recopilar filas
Las API de las instrucciones, funciones o métodos reales utilizados poseen diferentes nombres para recopilar filas:
- Los cursores de Transact-SQL utilizan las instrucciones FETCH FIRST, FETCH LAST, FETCH NEXT, FETCH PRIOR, FETCH ABSOLUTE(n) y FETCH RELATIVE(n).
- OLE DB utiliza métodos como IRowset::GetNextRows, IRowsetLocate::GetRowsAt, IRowsetLocate::GetRowsAtBookmark y IRowsetScroll::GetRowsAtRatio.
- ODBC utiliza la función SQLFetch, que es la misma que FETCH NEXT para una fila, o la función SQLFetchScroll. SQLFetchScroll admite cursores de bloque y todas las opciones de recopilación (primera, última, siguiente, anterior, absoluta y relativa).
- ADO utiliza los métodos Move, MoveFirst, MoveLast, MoveNext y MovePrevious Recordset para adquirir una posición en un cursor. A continuación, utiliza el método GetRows del objeto Recordset para recuperar una o más filas en dicha posición. También se puede llamar a GetRows directamente con el parámetro Start, que está establecido en el número de la fila que se desea recopilar.
Vea también
Otros recursos
Fetching Rows
Scrolling and Fetching Rows
Funciones del cursor (Transact-SQL)
FETCH (Transact-SQL)
Using Cursors