Cursores em bloco

Muitos aplicativos gastam uma quantidade significativa de tempo trazendo dados pela rede. Parte desse tempo é gasto realmente trazendo os dados pela rede, e parte dele é gasto em sobrecarga de rede, como a chamada feita pelo driver para solicitar uma linha de dados. Este último tempo pode ser reduzido se o aplicativo fizer uso eficiente de cursores em bloco ou volume, que podem retornar mais de uma linha por vez.

Um aplicativo sempre tem a opção de usar um cursor em bloco. Em fontes de dados das quais apenas uma linha por vez pode ser buscada, os cursores em bloco devem ser simulados no driver. Isso pode ser feito executando várias buscas de uma única linha. Embora seja improvável que isso proporcione ganhos de desempenho, ele abre oportunidades para aplicativos. Esses aplicativos experimentarão aumentos de desempenho à medida que os SGBDs implementarem cursores de bloco nativamente e os drivers associados a esses SGBDs os exporem.

As linhas retornadas em uma única busca com um cursor de bloco são chamadas de conjunto de linhas. É importante não confundir o conjunto de linhas com o conjunto de resultados. O conjunto de resultados é mantido na fonte de dados, enquanto o conjunto de linhas é mantido em buffers de aplicativo. Enquanto o conjunto de resultados é fixo, o conjunto de linhas não é - ele muda de posição e conteúdo cada vez que um novo conjunto de linhas é buscado. Assim como um cursor de linha única, como o cursor somente SQL tradicional, aponta para uma linha atual, um cursor de bloco aponta para o conjunto de linhas, que pode ser considerado como linhas atuais.

Para executar operações que operam em uma única linha quando várias linhas foram buscadas, o aplicativo deve primeiro indicar qual linha é a linha atual. A linha atual é exigida por chamadas para SQLGetData e instruções de atualização e exclusão posicionadas. Quando um cursor em bloco retorna pela primeira vez um conjunto de linhas, a linha atual é a primeira linha do conjunto de linhas. Para alterar a linha atual, o aplicativo chama SQLSetPos ou SQLBulkOperations (para atualizar por indicador). A ilustração a seguir mostra a relação do conjunto de resultados, conjunto de linhas, linha atual, cursor do conjunto de linhas e cursor em bloco. Para obter mais informações, veja Usando cursores em bloco, mais adiante nesta seção, e Atualização posicionada e Excluir instruções e Atualizando dados com SQLSetPos.

Fetching Next, Prior, First, and Last Rowsets

Se um cursor é um cursor em bloco é independente de ser rolável. Por exemplo, a maior parte do trabalho em um aplicativo de relatório é gasta recuperando e imprimindo linhas. Por causa disso, ele funcionará mais rápido com um cursor em bloco somente para frente. Ele usa um cursor somente para frente para evitar a despesa de um cursor rolável e um cursor em bloco para reduzir o tráfego de rede.

Esta seção contém os tópicos a seguir.