você está aqui: Home  → Colunistas  →  Bancos de Dados Livres

Cursor

Por André Milani

Data de Publicação: 12 de Janeiro de 2007

Cursor é um recurso bastante interessante em bancos de dados pois permite que seus códigos SQL façam uma varredura de uma tabela ou consulta linha-por-linha, realizando mais de uma operação se for o caso.

Na maioria das vezes, um simples SELECT exibe na tela esta varredura, trazendo todos os registros da consulta em questão. A vantagem de usar um cursor é quando, além da exibição dos dados, queremos realizar algumas operações sobre os registros. Se o volume de operações for grande, fica muito mais fácil, limpo e prático escrever o código utilizando cursor, do que uma consulta SQL.

Por exemplo: É muito mais vantajoso criar um cursor que faça a análise de cada produto de estoque, conferindo seu histórico, calculando sua previsão de vendas para o próximo mês, capturando o melhor cliente que já o comprou, etc, do que criar um SELECT absurdamente grande que talvez não consiga ainda todas as informações de forma simples.

Para utilizar um cursor, analise o código-fonte a seguir, onde são mostrados e comentados passo-a-passo a criação de um cursor e sua chamada. O objetivo do cursor apresentado a seguir é de somar a kilometragem atual de todos os veículos de um banco de dados fictício.

IMPORTANTE: O exemplo a seguir é meramente didático, seu resultado poderia ser obtido com um SELECT simples de soma (função SUM()).

Se desejar executar este código em seu MySQL, copie-o e cole-o em um arquivo do tipo '.sql', e execute-o no terminal desta forma: mysql> source <caminho do arquivo>;

Código fonte

CREATE DATABASE TUTORIAL_CURSOR;
USE TUTORIAL_CURSOR;

CREATE TABLE VEICULOS(
VEICULO varchar(32) NOT NULL,
KILOMETRAGEM int NOT NULL
);

INSERT INTO VEICULOS (VEICULO, KILOMETRAGEM) VALUES ('Carro 1',  '5230');
INSERT INTO VEICULOS (VEICULO, KILOMETRAGEM) VALUES ('Carro 2',  '7800');
INSERT INTO VEICULOS (VEICULO, KILOMETRAGEM) VALUES ('Carro 3', '16540');
INSERT INTO VEICULOS (VEICULO, KILOMETRAGEM) VALUES ('Carro 4', '32230');

DROP PROCEDURE IF EXISTS TUTORIAL_CURSOR.SomaKilometragem;

DELIMITER $$
CREATE PROCEDURE TUTORIAL_CURSOR.SomaKilometragem (OUT resultado INT)
BEGIN

— Definição de variáveis utilizadas na Procedure
DECLARE existe_mais_linhas INT DEFAULT 0;
DECLARE kilometros INT DEFAULT 0;
DECLARE total_de_kilometros INT DEFAULT 0;

— Definição do cursor
DECLARE meuCursor CURSOR FOR SELECT KILOMETRAGEM FROM VEICULOS;

— Definição da variável de controle de looping do cursor
DECLARE CONTINUE HANDLER FOR NOT FOUND SET existe_mais_linhas=1;

— Abertura do cursor
OPEN meuCursor;

— Looping de execução do cursor
meuLoop: LOOP
FETCH meuCursor INTO kilometros;

— Controle de existir mais registros na tabela
IF existe_mais_linhas = 1 THEN
LEAVE meuLoop;
END IF;

— Soma a kilometragem do registro atual com o total acumulado
SET total_de_kilometros = total_de_kilometros + kilometros;

— Retorna para a primeira linha do loop
END LOOP meuLoop;

— Setando a variável com o resultado final
SET resultado = total_de_kilometros;

END $$

DELIMITER ;

CALL SomaKilometragem(@variavel_temporaria);
SELECT @variavel_temporaria;

O resultado final para este cursor é o seguinte:

+----------------------+
| @variavel_temporaria |
+----------------------+
| 61800                |
+----------------------+

André Milani é autor do livro MySQL - Guia do Programador, da editora Novatec, um livro que indica ao leitor todos os passos necessários para conhecer e utilizar esta ferramenta da melhor maneira possível, partindo do básico, para quem não teve ainda nenhum contato com o MySQL, até o nível avançado, servindo como um guia de referência para administradores, por meio de explicações claras e objetivas complementadas com exemplos práticos para cada situação de uso. Destinado a administradores de bancos de dados, programadores, estudantes e a todos que se interessam pelo assunto.

Para saber mais sobre o livro, acesse: http://www.novateceditora.com.br/livros/mysqlcompleto

Sobre o autor

Luiz Paulo de Oliveira Santos teve seu primeiro contato com computadores em 1984, estudou BASIC para equipamentos de 8 bits (ZX-81 e Apple 2), em 1985 com o ambiente de 16 bits, e em 1988 com o ambiente de 32 bits. Em 1993 foi um dos primeiros Brasileiros a ter contato com o VBK que em 1995 se tornou o Delphi. Graduou em Tecnologia Em Processamento de Dados, cursou especialização em Análise de Sistemas e atualmente é graduando em Ciências Jurídicas. Atua como analista de suporte de redes da Universidade Metodista de Piracicaba, é editor da revista DB Freemagazine (uma revista gratuíta focada exclusivamente para bancos de dados Cliente/Servidor) e professor nas Faculdades Integradas Einstein de Limeira no curso de Tecnologia em Sistemas de Informação. Tem experiência nas áreas: Sistemas de Computação, Redes e Teleprocessamento de Dados, Bancos de Dados cliente-servidor e SQL. É autor do livro Firebird - Dicas de Segurança, publicado pela Editora Ciência Moderna.

Recomende este artigo nas redes sociais

 

 

Veja a relação completa dos artigos desta coluna