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