stored procedure com cursor
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
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
Rafa-martin
Curtidas 0
Respostas
Viniciusnunes
30/09/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.
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.
GOSTEI 0