No history yet

Tipos de cursores

Navegando pelos Dados

Em bancos de dados, um cursor funciona como um ponteiro para uma linha específica dentro de um conjunto de resultados de uma consulta. Em vez de processar todos os resultados de uma vez, um cursor permite que você percorra o conjunto, uma linha de cada vez, para realizar operações complexas.

Um cursor é um objeto de banco de dados usado para recuperar, manipular e navegar por um conjunto de resultados, linha por linha.

Imagine que você pediu a um bibliotecário uma lista de todos os livros de um determinado autor. Em vez de receber a pilha inteira de livros de uma só vez, o bibliotecário entrega um livro de cada vez. O cursor é a sua mão, que pega um livro (uma linha de dados), o examina e depois pede o próximo.

Existem diferentes maneiras de navegar por essa lista, e cada uma tem suas próprias regras e implicações de desempenho. Vamos explorar os três tipos principais de cursores.

Tipos de Cursores de Banco de Dados

A forma como um cursor se move e interage com os dados subjacentes define seu tipo. A escolha certa depende do que sua aplicação precisa fazer com os resultados da consulta.

TYPE_FORWARD_ONLY

noun

Um cursor que só pode se mover para frente, uma linha de cada vez, do início ao fim do conjunto de resultados.

Este é o tipo de cursor padrão e o mais eficiente. Ele funciona como uma rua de mão única. Você começa na primeira linha e só pode avançar para a próxima, depois para a seguinte, até chegar ao final. Não é possível voltar para uma linha que você já passou.

Por causa de sua simplicidade, ele consome menos recursos do banco de dados. É ideal para tarefas como processamento em lote, exportação de dados ou qualquer cenário onde você só precise ler os dados em sequência uma única vez.

Agora, vamos considerar um tipo de cursor mais flexível.

TYPE_SCROLL_INSENSITIVE

noun

Um cursor que pode se mover para frente e para trás, mas não reflete as alterações feitas nos dados subjacentes por outras transações após sua criação.

Este tipo de cursor permite que você se mova livremente pelo conjunto de resultados, para frente, para trás, para o início, para o fim ou para uma linha específica. A parte chave é "insensível". Quando o cursor é criado, o banco de dados tira uma "foto" dos dados. Você navega por essa foto.

Isso significa que, se outra pessoa adicionar, atualizar ou excluir linhas na tabela original enquanto seu cursor estiver aberto, você não verá essas alterações. Você sempre trabalhará com os dados como eles eram no momento em que a consulta foi executada. Isso é útil quando você precisa de uma visão estática e consistente dos dados para análise ou para preencher uma interface de usuário que permite paginação.

Lesson image

Finalmente, há o tipo mais poderoso e que consome mais recursos.

TYPE_SCROLL_SENSITIVE

noun

Um cursor que pode se mover em qualquer direção e reflete as alterações (adições, atualizações, exclusões) feitas nos dados subjacentes por outras transações.

Também conhecido como cursor dinâmico, este tipo é "sensível" a alterações nos dados. Como o tipo insensível, ele pode se mover em qualquer direção. No entanto, ele tenta refletir as alterações feitas nos dados de origem enquanto está aberto.

Se outra transação atualizar uma linha, você verá a alteração na próxima vez que buscar essa linha. Se novas linhas que correspondem à sua consulta forem adicionadas, elas poderão aparecer no seu conjunto de resultados. Linhas excluídas desaparecerão. Isso o torna perfeito para aplicações que precisam trabalhar com dados em tempo real, como um painel de monitoramento ao vivo. No entanto, essa funcionalidade tem um custo de desempenho significativo, pois o banco de dados precisa trabalhar mais para manter o cursor sincronizado.

Qual Cursor Usar?

A escolha do cursor certo é um equilíbrio entre funcionalidade e desempenho. Usar o cursor mais complexo quando um mais simples seria suficiente pode desperdiçar recursos do sistema.

Tipo de CursorDireção de MovimentoSensibilidade a AlteraçõesImpacto no Desempenho
TYPE_FORWARD_ONLYApenas para frenteNão sensívelBaixo (mais rápido)
TYPE_SCROLL_INSENSITIVEPara frente e para trásNão sensível (instantâneo)Médio
TYPE_SCROLL_SENSITIVEPara frente e para trásSensível (dinâmico)Alto (mais lento)

Aqui estão alguns cenários práticos:

  • Geração de Relatórios: Você precisa processar uma grande quantidade de dados sequencialmente para gerar um relatório. Use TYPE_FORWARD_ONLY. É o mais rápido e eficiente para essa tarefa.

  • Interface com Paginação: Você está exibindo resultados de pesquisa em uma página da web, permitindo que o usuário navegue entre as páginas (próxima, anterior, última). Um TYPE_SCROLL_INSENSITIVE é uma boa escolha. Ele fornece a flexibilidade de navegação necessária, garantindo que os resultados não mudem inesperadamente enquanto o usuário está navegando.

  • Painel de Monitoramento ao Vivo: Sua aplicação exibe o status de pedidos em tempo real. Você precisa ver as atualizações, novos pedidos e cancelamentos assim que acontecem. TYPE_SCROLL_SENSITIVE é a única opção que fornecerá essa visão dinâmica, apesar de seu maior custo de desempenho.

Sempre comece com o tipo de cursor mais simples que atenda às suas necessidades. Opte pelo TYPE_FORWARD_ONLY a menos que você precise explicitamente da capacidade de rolar para trás ou ver alterações em tempo real.

Compreender os diferentes tipos de cursores permite que você tome decisões informadas ao projetar suas aplicações, otimizando tanto a funcionalidade quanto a eficiência.

Quiz Questions 1/5

Qual é a função principal de um cursor em um banco de dados?

Quiz Questions 2/5

Você está desenvolvendo uma interface de usuário que exibe uma longa lista de produtos e permite que o usuário navegue entre as páginas (próxima, anterior, primeira, última). Qual tipo de cursor é o mais adequado para garantir uma experiência de paginação consistente, sem que os resultados mudem inesperadamente enquanto o usuário navega?