Os cursores são objetos de banco de dados que permitem acessar e manipular dados uma linha de cada vez a partir de um conjunto de resultados retornados por uma consulta SQL. Pense neles como ponteiros que navegam pelas linhas em um conjunto de resultados.
Aqui está um colapso do que eles são e por que eles são usados:
Conceitos -chave: *
Conjunto de resultados: Uma coleção de linhas retornadas por uma consulta SQL. Quando você executa uma instrução `select`, o servidor de banco de dados gera um conjunto de resultados.
*
Processamento de linha por fila: Os cursores permitem buscar e processar cada linha do conjunto de resultados individualmente. Isso contrasta com as operações SQL padrão que normalmente operam em todo o conjunto de resultados de uma só vez.
*
ponteiro/iterador: Um cursor atua essencialmente como um ponteiro ou iterador que mantém o controle da linha atual sendo acessada. Você pode mover o cursor para a frente para acessar linhas subsequentes.
Por que usar cursores? Os cursores geralmente são usados quando você precisa executar operações complexas em cada linha de um conjunto de resultados difíceis ou impossíveis de serem alcançadas com as instruções SQL padrão. Cenários comuns incluem:
*
Atualizações condicionais/exclui: Pode ser necessário atualizar ou excluir uma linha com base nos valores encontrados em outras linhas do mesmo conjunto de resultados ou em outras tabelas.
* cálculos
baseados em linhas anteriores: Pode ser necessário calcular uma média total, média móvel ou outro valor cumulativo que depende dos valores nas linhas anteriores.
*
Integrando com sistemas externos: Pode ser necessário recuperar dados de um banco de dados e, em seguida, usar esses dados para interagir com aplicativos externos ou APIs, processando cada linha individualmente.
*
Lógica complexa dentro de procedimentos armazenados: Os cursores são frequentemente usados em procedimentos armazenados quando você precisa implementar uma lógica de negócios complexa que requer iterando através de um conjunto de resultados.
*
Relatórios: A geração de relatórios personalizados ou a execução de formatação de dados complexos geralmente depende do processamento de linha a fila.
Como os cursores funcionam (simplificados): 1.
declarar o cursor: Você primeiro declara um cursor, especificando a instrução `select` que gerará o conjunto de resultados com o qual o cursor funcionará.
2.
Abra o cursor: A abertura do cursor executa a instrução `select` e cria o conjunto de resultados. O cursor está posicionado antes da primeira linha.
3.
buscar linhas: Você usa uma instrução `Fetch` para recuperar os dados da linha atual e mover o cursor para a próxima linha.
4.
Processe os dados: Dentro de um loop, você processa os dados recuperados de cada linha. Isso pode envolver atualizar outras tabelas, realizar cálculos ou chamar procedimentos externos.
5. Feche o cursor: Depois de processar todas as linhas, você fecha o cursor, liberando os recursos que estava usando.
6.
Dealpor o cursor: Finalmente, você negocia o cursor.
Exemplo (sintaxe conceitual - específico varia de acordo com o banco de dados): `` `SQL
- Declare um cursor
Declarar my_cursor cursor para
Selecione Funcionário_id, salário dos funcionários onde departamento_id =10;
- Abra o cursor
Abra my_cursor;
- buscar a primeira linha
Busque a seguinte do my_cursor em @emp_id, @salary;
- Faça um loop através do conjunto de resultados
Enquanto @@ fetch_status =0 - verifique se a busca foi bem -sucedida
COMEÇAR
- Processe os dados (Exemplo:Levante salário se abaixo de um limite)
Se @Salary <50000
COMEÇAR
Atualizar funcionários Salário definido =Salário * 1.10 onde funcionário_id =@emp_id; - Aumente o salário em 10%
FIM;
- buscar a próxima linha
Busque a seguinte do my_cursor em @emp_id, @salary;
FIM;
- Feche o cursor
Fechar my_cursor;
- Dealpor o cursor
Desalpor my_cursor;
`` `
Considerações e desvantagens importantes: *
Impacto de desempenho: Os cursores podem ser significativamente mais lentos que as operações de SQL baseadas em conjunto, especialmente ao lidar com grandes conjuntos de resultados. O processamento de linha a fila é inerentemente menos eficiente do que o processamento de dados em lotes. Sempre que possível, tente obter o resultado desejado usando consultas SQL padrão.
*
Complexidade: Os cursores podem tornar seu código mais complexo e mais difícil de manter.
*
problemas de bloqueio: Os cursores podem manter bloqueios nos recursos do banco de dados por períodos mais longos, potencialmente levando a problemas de contenção e desempenho.
*
Alternativas: Antes de recorrer a cursores, explore alternativas como:
*
Operações SQL baseadas em conjunto: Muitas vezes, você pode obter o mesmo resultado com uma consulta SQL inteligente.
*
Procedimentos armazenados com tabelas temporárias: Crie uma tabela temporária para manter o conjunto de resultados intermediários e, em seguida, execute operações na tabela temporária.
*
Usando o código do aplicativo (por exemplo, Python, Java) para processar os dados: Recupere todo o resultado do resultado no seu aplicativo e execute o processamento de linha a fila lá. Às vezes, isso pode ser mais eficiente do que usar cursores.
Em resumo, os cursores são uma ferramenta poderosa, mas muitas vezes menos eficiente, para o processamento de linha a fila em bancos de dados. Use -os apenas quando necessário e considere cuidadosamente as implicações de desempenho. Esforce-se para usar operações SQL baseadas em conjunto sempre que possível.