Buscando e rolando
A operação para recuperar uma linha de um cursor é denominada busca. Estas são as opções de busca:
FETCH FIRST
Busca a primeira linha do cursor.
FETCH NEXT
Busca a linha seguinte à última linha buscada.
FETCH PRIOR
Busca a linha anterior à última linha buscada.
FETCH LAST
Busca a última linha do cursor.
FETCH ABSOLUTE n
Busca a nª linha da primeira linha do cursor se n for um número inteiro positivo. Se n for um número inteiro negativo, a linha n linhas antes do final do cursor será buscada. Se n for 0, nenhuma linha será buscada.
FETCH RELATIVE n
Busca a linha n linhas após a última linha buscada. Se n for positivo, a linha n linhas após a última linha buscada será buscada. Se n for negativo, a linha n linhas antes da última linha buscada será buscada. Se n for 0, a mesma linha é novamente buscada.
Quando um cursor é aberto, a posição atual da linha no cursor é, logicamente, antes da primeira linha. Isso faz com que diferentes opções de busca tenham os seguintes comportamentos caso seja a primeira busca executada após a abertura do cursor:
FETCH FIRST
Busca a primeira linha do cursor.
FETCH NEXT
Busca a primeira linha do cursor.
FETCH PRIOR
Não busca linhas.
FETCH LAST
Busca a última linha do cursor.
FETCH ABSOLUTE n
Busca a nª linha da primeira linha do cursor se n for um número inteiro positivo. Se n for um número inteiro negativo, a linha n linhas antes do final do cursor é buscada (por exemplo, n = -1 retorna a última linha do cursor). Se n for 0, nenhuma linha será buscada.
FETCH RELATIVE n
Busca a nª linha do cursor se n for um número inteiro positivo. Nenhuma linha é buscada quando n é um número negativo ou 0.
Os cursores do Transact-SQL limitam-se a buscar uma linha de cada vez. Os cursores de servidor API dão suporte à busca de blocos de linhas a cada busca. Um cursor que dá suporte à busca de várias linhas por vez é denominado cursor de bloco.
Classificações de cursor
Um cursor pode ser classificado pelas opções de busca que suporta:
Cursor de somente avanço
As linhas devem ser buscadas de forma sucessiva, da primeira à última linha. FETCH NEXT é a única operação de busca permitida.
Rolável
As linhas podem ser buscadas aleatoriamente, de qualquer lugar no cursor. Todas as operações de busca são permitidas (salvo os cursores dinâmicos, que não dão suporte à busca absoluta).
Os cursores roláveis são especialmente úteis para oferecer suporte a aplicativos online. Um cursor pode ser mapeado para uma grade ou caixa de listagem no aplicativo. Como os usuários rolam para cima e para baixo, e em torno de toda a grade, o aplicativo utiliza a busca por rolagem para recuperar as linhas do cursor que o usuário deseja consultar.
APIs de linhas de busca
As APIs de instruções, funções ou métodos reais usados têm nomes diferentes para buscar linhas:
Os cursores do Transact-SQL usam as instruções FETCH FIRST, FETCH LAST, FETCH NEXT, FETCH PRIOR, FETCH ABSOLUTE(n) e FETCH RELATIVE(n).
O DB OLE usa métodos como IRowset::GetNextRows, IRowsetLocate::GetRowsAt, IRowsetLocate::GetRowsAtBookmarke IRowsetScroll::GetRowsAtRatio.
O ODBC usa a função SQLFetch, que funciona igual a FETCH NEXT em uma linha, ou a função SQLFetchScroll. A função SQLFetchScroll suporta cursores de bloco e todas as opções de busca (primeira, última, próxima, anterior, absoluta, relativa).
ADO usa os métodos Move, MoveFirst, MoveLast, MoveNext e MovePrevious Recordset para obter uma posição em um cursor. O método de conjunto de registros GetRows é usado, portanto, para recuperar uma ou mais linhas da posição. O método GetRows também pode ser chamado diretamente com o conjunto de parâmetros Start para o número da linhas a serem buscadas.
Consulte também