Array
(
)

stored procedure com cursor

Rafa-martin
   - 30 set 2005

pessoal, alguém por favor poderia me explicar o que cada linha na stored procedure com cursor abaixo faz? Não entendi quase.

declare Berrini500_Cursor cursor for
select distinct(Title_Empresa) from rpt_visitor
Where lastchanged between @dt_full and @dt_fullf
order by Title_Empresa asc
open Berrini500_Cursor
fetch next from Berrini500_Cursor into @CiaName

delete from xxx

while (@@fetch_status <> -1)
begin
if(@@fetch_status <> -2)
begin

insert into xxx
select Title_Empresa as Empresa,
count(Title_Empresa) as Total
from rpt_visitor
Where title_empresa = @CiaName
group by Title_Empresa
order by Title_Empresa

end
fetch next from Berrini500_Cursor into @CiaName
end
Print ´Relatorio de Visitantes - Berrini 500´
Print ´´
Print ´Periodo:´ + ´ ´ + @dt_full + ´ - ´ + @dt_fullF
Print ´´
select Empresa,Total from xxx
group by Empresa,total
order by Empresa
--compute sum(Total)
select sum(total) as Total_de_Visitantes from xxx
deallocate Berrini500_Cursor

valeu

Viniciusnunes
   - 08 dez 2005

Amigo.

Peguei a sua propria pergunta e respondi sempre usando o sinalizador -->

Espero ter ajudado.

declare Berrini500_Cursor cursor for
select distinct(Title_Empresa) from rpt_visitor
Where lastchanged between @dt_full and @dt_fullf
order by Title_Empresa asc

--> o código acima declara um cursor com um unico campo
funciona semelhante a um recordset.

open Berrini500_Cursor

--> O codigo acima abre o cursor e o torna disponivel para acesso
funciona semelhante a um Open do recordset

fetch next from Berrini500_Cursor into @CiaName

--> O codigo acima move o cursor para o 1º registro
funciona semelhante a o movefirst de um recordset

delete from xxx

while (@@fetch_status <> -1)
begin
if(@@fetch_status <> -2)
begin

---> o Comando @@fetch_status <> -1 testa se o cursor esta aberto
---> o Comando @@fetch_status <> -2 testa se o cursor tem registro
funciona semelhante a o EOF do recordset

insert into xxx
select Title_Empresa as Empresa,
count(Title_Empresa) as Total
from rpt_visitor
Where title_empresa = @CiaName
group by Title_Empresa
order by Title_Empresa

end

fetch next from Berrini500_Cursor into @CiaName

--> O codigo acima move o cursor para o proximo registro
funciona semelhante a o movenext de um recordset

end
Print ´Relatorio de Visitantes - Berrini 500´
Print ´´
Print ´Periodo:´ + ´ ´ + @dt_full + ´ - ´ + @dt_fullF
Print ´´
select Empresa,Total from xxx
group by Empresa,total
order by Empresa
--compute sum(Total)
select sum(total) as Total_de_Visitantes from xxx

deallocate Berrini500_Curso
--> O Codigo acima destroi o cursor

Obs : É sempre bom colocar antes do deallocate um close Nome_Cursor.

Obs : Segundo livros e especialistas (DBA) o curso torna a procedure mais lenta.

boa sorte.

Att.