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