[firebase-br] Variáveis em recursividade

Thiago Rachadel thiago.rachadel em gmail.com
Sex Jul 14 08:35:13 -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?

 

Att

 

 

Thiago Felipe Rachadel Rutsatz

Analista de Sistemas

Metalúrgica Sipaca Ltda

 <file:///\\www.sipaca.com.br> 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