[firebase-br] Variáveis em recursividade

Thiago Rachadel thiago.rachadel em gmail.com
Sex Jul 14 13:17:20 -03 2017


Bom dia!

Estou precisando fazer uma procedure com recursividade, mas estou com uma
dificuldade.
Levando como exemplo a estrutura:

Item 1
Item 2
    SubItem3
    SubItem4
         SubItem5
Item 6

SET TERM ^ ;

CREATE PROCEDURE LISTA(
    cod varchar(20),
    nivel_ini integer)
returns (
    nivel integer,
    item varchar(20),
)
as
begin
   if (nivel_ini is null) then
     nivel = 1;
   else
     nivel = nivel_ini;

   FOR
   SELECT item
    FROM lista_materia mat
    WHERE mat.codigo = :cod
    INTO :item
  do
  begin
     suspend;
        for
          SELECT nível, item
          FROM LISTA(:item, :nível+1)
          INTO :nível, :item
        do
        begin
              suspend;
        end
  end
end

A procedure está muitíssimo simplificada apenas para explicar o conceito que
estou precisando. É uma estrutura onde um item pode ter subitens
cadastrados. E estes subitens podem ter novos subitens. Isto infinitamente.
O problema acontece no Item 6. Ele deveria receber nível = 1, mas ao invés
disso a recursividade altera o nível da camada de baixo e ele recebe 3.
Acredito q a variável nível é compartilhada em todas as instancias
recursivas da procedure lista. Existe uma forma  para haver um isolamento
desta variável de forma q uma chamada não interfira no resultado da outra?
Em tempo, no contexto nível deve ser o sequencial de quem chamou a
procedure.

Att


Thiago Felipe Rachadel Rutsatz
Analista de Sistemas
Metalúrgica Sipaca Ltda
www.sipaca.com.br
Rua Leopoldo Augusto Gerent, 100 – Jaraguá do Sul - SC
Fone/Fax: (47)3371-3002







Mais detalhes sobre a lista de discussão lista