você está aqui: Home → Colunistas → Bancos de Dados Livres
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>;
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
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.