Re: [firebase-br] Stored procedure Selecionável (RECURSIVA)

Marcelo Silva marcvan em ig.com.br
Sex Out 20 08:41:23 -03 2006


Colega vou te passar uma procedure que um colega da lista (Kleber Caneva) me 
ajudou a fazer.
Essa ajuda dele foi uma mão na roda, pois com ideia tambem fim funções 
dentro do delphi :)

Essa procedure faz uma arvore de dependencias (Nao sei se é isso que 
precisa)

Pai
  Filho
  Filho
    Neto
      Bisneto
      Bisneto
        Etc...

//// INICIO  ////

SET TERM ^ ;

CREATE PROCEDURE SP_DEPENDENCIA (
    PAI INTEGER)
RETURNS (
    COD_DIS INTEGER,
    NOME VARCHAR(30),
    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
     FROM DISTRIB
     Where COD_DIS = :PAI
     Into :COD_DIS, :COD_PAI, :NOME ;
    SUSPEND;
  END

-- Procura por filhos desse pai.
  FOR
     Select
          COD_DIS,  COD_PAI, NOME
     From DISTRIB
     Where COD_PAI = :PAI
     Into :COD_DIS, :COD_PAI, :NOME
 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
         FROM SP_DEPENDENCIA( :COD_DIS )
         Into :COD_DIS, :COD_PAI, :NOME
     DO
         SUSPEND;

END^

SET TERM ; ^

//// FIM ////

A estrutura da tabela é basicamente

DISTRIB -> Tabela ditribuidores
COD_DIS -> Codigo do distribuidor
COD_PAI -> Codigo do distribuiror que apresentou
NOME -> Esse todos sabem :)

Demais campos dica a critério da necessidade


Espero que ajude


E aporveitando a deixa, Kleber muito obrigado :)

[]´s


----------------------
Marcelo Silva
(11) 9693-4251
(11) 6723-3106 - LESTCRED
MSN: marcvan em ig.com.br




----- Original Message ----- 
From: "Rodrigo A. de Freitas" <rodrigo em solucoeseinformatica.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Thursday, October 19, 2006 10:56 AM
Subject: Re: [firebase-br] Stored procedure Selecionável (RECURSIVA)


Faltou a clausula INTO:

select CAMPO1 from MINHA_PROC(:CODIGO_GRUPO)
into :CAMPO1;

[]'s

Rodrigo

>  O problema é que justamente na linha da chamada recursiva dá erro quando
> compilo a procedure.
> desculpe gente, esqueci de colocar o erro...
>
> o erro vai lá embaixo... dá erro no ponto e vírgula lá do final, mas se eu
> tirar o ponto e vírgula o erro passa pro end
> não que que cargas d´águas é isso..
>
> Abraço
>
>
> === Line: 24
> ===================================================================
> ********* Statement:
> CREATE PROCEDURE MINHA_PROC (
>     COD_GRUPO VARCHAR(3) CHARACTER SET NONE)
> RETURNS (
>     CAMPO1 VARCHAR(70) CHARACTER SET NONE)
> AS
> DECLARE VARIABLE CODIGO_GRUPO VARCHAR(3);
> begin
>
>
>     for select g.descricao,g.cod_grupo  from grupos g
>      where g.cod_grupo_pai = :COD_GRUPO
>      into :CAMPO1,:CODIGO_GRUPO
>     do
>      begin
>        suspend;
>        select CAMPO1 from MINHA_PROC(:CODIGO_GRUPO);
>      end
>
>
> end
>
>
> ********* Error:
> Invalid token.
> Dynamic SQL Error.
> SQL error code = -104.
> Token unknown - line 16, char 52.
> ;.
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>



______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa



-- 
Internal Virus Database is out-of-date.
Checked by AVG Free Edition.
Version: 7.1.407 / Virus Database: 268.13.1/466 - Release Date: 07/10/2006






Mais detalhes sobre a lista de discussão lista