[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