[firebase-br] Update em Arvore de dependencias

Marcelo Silva marcvan em ig.com.br
Seg Jul 2 16:58:19 -03 2007


Pessoal estou tentando montar uma SP para dar um UPDATE numa arvore de dependencias mas sem sucesso
Alguem poderia me dar uma dica de como fazer ?

Abaixo tenho uma SP que me retorna a ARVORE de dependentes

Precisava algo que quando sair um do meio da arvore o que estiverem abaixo dele suba...

1001 FILHO DE 1000
1003 FILHO DE 1001

Quando o 1001 sair o 1003 passa a ser filho do 1000, mas o detalhe é que cada pai so pode ter 3 filhos :(

Ou seja é uma Matriz forcada de (3 X 3)


Exemplo da arvore

SET TERM ^ ;

CREATE PROCEDURE SP_ARVORE (
    PAI INTEGER)
RETURNS (
    COD_HER INTEGER,
    DATA_CAD DATE,
    CONFIRMADO CHAR(3),
    COD_DIS INTEGER,
    NOME VARCHAR(60),
    COD_PAI INTEGER)
AS
BEGIN

-- Retorna os dados do Pai, se não for o chamada principal
IF (:PAI <> 0) THEN
  BEGIN
     SELECT COD_DIS,  COD_PAI, NOME, CONFIRMADO, DATA_CAD, COD_HER
     FROM DISTRIB
     Where COD_DIS = :PAI
     Into :COD_DIS, :COD_PAI, :NOME, :CONFIRMADO,  :DATA_CAD, :COD_HER ;
    SUSPEND;
  END

-- Procura por filhos desse pai.
  FOR
     Select
          COD_DIS,  COD_PAI, NOME, CONFIRMADO, DATA_CAD, COD_HER
     From DISTRIB
     Where COD_PAI = :PAI
     Into :COD_DIS, :COD_PAI, :NOME, :CONFIRMADO,  :DATA_CAD, :COD_HER
 DO
    -- Se existir ele chama como recursivamente a SP para pegar o nome e verificar se tem netos.
    FOR
         SELECT COD_DIS,  COD_PAI, NOME, CONFIRMADO, DATA_CAD, COD_HER
         FROM SP_ARVORE( :COD_DIS )
         Into :COD_DIS, :COD_PAI, :NOME, :CONFIRMADO,  :DATA_CAD, :COD_HER
     DO
         SUSPEND;

END^

SET TERM ; ^

* No cadastro eu limito a 3 pessoas para cada um se for o 4 eu forço ele descer um abaixo



----------------------------------------
Marcelo Silva
msn: marcvan em ig.com.br
cel: (11) 9693-4251


Mais detalhes sobre a lista de discussão lista