permitem o processamento das linhas retornadas por uma consulta (SELECT), atraves de estruturas complexas de programacao, como repeticoes ou comandos condicionais. O exemplo basico de cursor consiste em uma repeticao (loop) onde um mesmo conjunto de comandos e executado para todas as linhas do retorno de uma consulta. No exemplo abaixo, utiliza-se um cursor para executar a chamada da procedure sp_helptext para cada procedure de um banco de dados. As procedures foram obtidas atraves de uma consulta na view ROUTINES do Schema INFORMATION SCHEMA. DECLARE @schemaName VARCHAR(30) , @procName VARCHAR(30) , @fullName VARCHAR(60) -- Cursor para percorrer os nomes dos objetos DECLARE cursor_objects CURSOR FOR SELECT ROUTINE_SCHEMA , ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE' -- Abrindo Cursor para leitura OPEN cursor_objects -- Lendo a proxima linha FETCH NEXT FROM cursor_objects INTO @schemaName, @procName -- Percorrendo linhas do cursor (enquanto houverem) WHILE @@FETCH_STATUS = 0 BEGIN SELECT @fullName = @schemaName + '.' + @procName EXEC sp_helptext @fullName -- Lendo a proxima linha FETCH NEXT FROM cursor_objects INTO @schemaName, @procName END -- Fechando Cursor para leitura CLOSE cursor_objects -- Desalocando o cursor DEALLOCATE cursor_objects Algumas consideracoes: Um cursor deve estar sempre associado a uma consulta, especificada ao declarar o cursor. O comando FETCH popula as variaveis recebidas como parametro com os valores da proxima linha da consulta a ser lida. O numero de variaveis passadas como parametro deve ser igual ao numero de colunas retornadas na consulta associada ao cursor. A variavel global @@FETCH_STATUS retorna o resultado da ultima operacao FETCH executada por um cursor na conexao. O status 0 significa que o comando FETCH retornou uma linha, qualquer outro resultado significa que nao houve linha retornada. Cursores sao estruturas relativamente lentas se comparadas ao desempenho de consultas do banco. O uso descuidado dessa ferramenta pode causar serios problemas de performance. Confidencialidade: A informacao contida nesta mensagem de e-mail, incluindo quaisquer anexos, e confidencial e esta reservada apenas a pessoa ou entidade para a qual foi enderecada. Se voce nao e o destinatario ou a pessoa responsavel por encaminhar esta mensagem ao destinatario, voce esta, por meio desta, notificado que nao devera rever, retransmitir, imprimir, copiar, usar ou distribuir esta mensagem de e-mail ou quaisquer anexos. Caso voce tenha recebido esta mensagem por engano, por favor, contate o remetente imediatamente e apague esta mensagem de seu computador ou de qualquer outro banco de dados. Muito obrigado. Confidentiality Notice: The information contained in this email message, including any attachment, is confidential and is intended only for the person or entity to which it is addressed. If you are neither the intended recipient nor the employee or agent responsible for delivering this message to the intended recipient, you are hereby notified that you may not review, retransmit, convert to hard copy, copy, use or distribute this email message or any attachments to it. If you have received this email in error, please contact the sender immediately and delete this message from any computer or other data bank. Thank you.