Partilhar via


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.