[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