Aprendendo a usar CURSOR – SQL Server

Boa noite!

Depois de um tempo se escrever é bom voltar a publicar algo um pouco mais substancial, hehehe…

Não gosto do consumo de processamento que eles geram, mas são muito úteis e bastante poderosos na manipulação de dados. Nesse primeiro momento não vou me aprofundar em CURSORES, mas apresentá-lo aqueles que estão iniciando no Microsoft SQL Server.

O que é CURSOR?

De maneira direta e simplista é uma espécie de ponteiro que nos ajuda a manipular e exibir dados consultados.

Como funciona?

Para entender é interessante um método de dividir como um cursor é declarado e o que ele faz. Segue abaixo:

1. Declara CURSOR (DECLARE)

2. Abre o CURSOR (OPEN)

3. Alimenta variáveis com os dados do CURSOR (FETCH)

4. Fecha e desaloca o CURSOR (CLOSE e DEALLOCATE)

<‘o’> Simples assim? Simples assim.

Vamos para um exemplo prático. Vou utilizar uma tabela cliente cujo o código de criação segue abaixo:

–Código de criação da tabela CLIENTE e alguns INSERTS só para exemplificar o CURSOR

create table CLIENTE
(
CodigoCliente int null,
NomeCliente varchar(50) null
)
go

insert into CLIENTE values (1,’Cliente 1′)
insert into CLIENTE values (2,’Cliente 2′)
insert into CLIENTE values (3,’Cliente 3′)
insert into CLIENTE values (4,’Cliente 4′)
insert into CLIENTE values (5,’Cliente 5′)

Agora vou utilizar o cursor fazer uma manipulação “inútil” para exibir os dados. É somente didática. Não serve de muita coisa, pois sem CURSOR seria imensamente fácil fazê-la. Vou utilizar nos comentários os passos que indiquei a vocês anteriormente para que fique mais fácil a compreensão:

–1. Declara CURSOR (DECLARE)
declare c_aprendendoCursor cursor for
select
CodigoCliente,
NomeCliente
from
CLIENTE

–2. Abre o CURSOR (OPEN)
open c_aprendendoCursor

–3. Alimenta variáveis com os dados do CURSOR (FETCH)
declare @cod int
declare @nome varchar(50)

fetch next from c_aprendendoCursor into @cod, @nome

print ‘Código do Cliente: ‘ + cast(@cod as varchar)
print ‘Nome do Cliente: ‘ + @nome
print ‘————————————————————————————‘

fetch next from c_aprendendoCursor into @cod, @nome

print ‘Código do Cliente: ‘ + cast(@cod as varchar)
print ‘Nome do Cliente: ‘ + @nome
print ‘————————————————————————————‘

fetch next from c_aprendendoCursor into @cod, @nome

print ‘Código do Cliente: ‘ + cast(@cod as varchar)
print ‘Nome do Cliente: ‘ + @nome
print ‘————————————————————————————‘

fetch next from c_aprendendoCursor into @cod, @nome

print ‘Código do Cliente: ‘ + cast(@cod as varchar)
print ‘Nome do Cliente: ‘ + @nome
print ‘————————————————————————————‘

–4. Fecha e desaloca o CURSOR (CLOSE e DEALLOCATE)
close c_aprendendoCursor
deallocate c_aprendendoCursor

Lembrando para quem já usa CURSOR que esse é um exemplo bem simplista! Por isso não vou me deter explicando maiores detalhes do CURSOR e nem sobre WHILE e @@FETCH_STATUS, etc, etc, etc…

Serão cenas do próximo capítulo! Rs

Espero que tenha sido útil. Até a próxima!

Anúncios