Re: [firebase-br] Dúvida IBExpert + Cursor
Jeferson Oliveira
jefersonfoliveira em gmail.com
Dom Mar 25 09:06:53 -03 2007
Magno System escreveu:
> Gostaria de saber para que serve este cursors.
Cursor é uma estrutura de dados associada à uma sentença SELECT, que
armazena o resultado da consulta e permite iteração pelos registros
retornados. O principal objetivo da implementação e uso de cursores é
permitir uma melhor organização do código PSQL. Por evitar que um
mesmo comando seja interpretado em mais de um ponto do código o uso de
cursores pode, em tese, proporcionar um pequeno ganho de performance.
O Firebird sempre teve disponível os chamados "cursores implícitos",
que nada mais são do que estruturas "for select ... do". O tipo
"Cursor" disponível na versão 2.0 é também denominado "cursor
explícito" pelo fato de deixar evidenciada uma variável que será
utilizada para navegação entre os registros resultantes de uma
consulta.
Os métodos disponíveis para manipulação de um cursor são OPEN, FETCH e
CLOSE, que tem a função de, respectivamente, abrir, retornar o próximo
registro e fechar o conjunto de dados.
Um cursor é um substituto elegante para o tradicional for select, como
pode ser percebido nos exemplos abaixo:
Usando for select (cursor implícito)
for
select Campo1, Campo2, ..., CampoN
from Tabela
into :Var1, :Var2, ..., :VarN do
begin
suspend;
end;
Usando cursores (explícitos):
declare C cursor for (select Campo1, Campo2, ..., CampoN
from Tabela);
begin
open C;
fetch C into :Var1, :Var2, ..., :VarN;
while (row_count > 0) do
begin
suspend;
fetch C into :Var1, :Var2, ..., :VarN;
end;
close C;
end;
Espero ter ajudado.
Abraço!
Jeferson Oliveira
Mais detalhes sobre a lista de discussão lista