[firebase-br] Store procedure

RedDevil reddevil em reddevil.eti.br
Qua Nov 2 17:05:32 -03 2005


ola John,

eu tomei a liberdade de fazer uma pequena alteraçao na SP que voce 
colocou na roda...

o caso eh que a tabela de telefones do Denis pode ter mais de um numero 
de telefone que pertença ao mesmo aluno...

sendo assim, eu alterei a tua SP para que ela possa retornar ate cinco 
numeros de telefones pertencentes ao mesmo aluno (eu acredito que nem um 
filho do Lula tenha mais do que cinco telefones para contato... falando 
nisso, alguem sabe se o Lula tem filha? e se tiver, ela eh gata? mas ae 
ja eh off-topic...;o).


entao a historia ficou tipow assim:

/* --------------- inicio da SP ------------------- */
CREATE PROCEDURE TESTE_TEL ( COD_ALUNO VARCHAR (10) )
RETURNS (
     CODIGO VARCHAR (10),
     NOME_ALUNO VARCHAR (100),
     IDADE_ALUNO VARCHAR (30),
     NUM_TEL1 VARCHAR(10),
     NUM_TEL2 VARCHAR(10),
     NUM_TEL3 VARCHAR(10),
     NUM_TEL4 VARCHAR(10),
     NUM_TEL5 VARCHAR(10)
)
AS
BEGIN
   For Select ALUNO.COD_ALUNO, ALUNO.NOM_ALUNO, ALUNO.IDADE_ALUNO
       From ALUNO
       Where (ALUNO.COD_ALUNO = :COD_ALUNO)
       Into :CODIGO, :NOME_ALUNO, :IDADE_ALUNO
   Do
   Begin

       Select TELEFONE.TEL from TELEFONE
       Where TELEFONE.COD_ALUNO = :COD_ALUNO
       Into :NUM_TEL1;

       Select TELEFONE.TEL from TELEFONE
       Where TELEFONE.COD_ALUNO = :COD_ALUNO
       and telefone.tel <> :num_tel1
       Into :NUM_TEL2;

       Select TELEFONE.TEL from TELEFONE
       Where TELEFONE.COD_ALUNO = :COD_ALUNO
       and telefone.tel <> :num_tel1
       and telefone.tel <> :num_tel2
       Into :NUM_TEL3;

       Select TELEFONE.TEL from TELEFONE
       Where TELEFONE.COD_ALUNO = :COD_ALUNO
       and telefone.tel <> :num_tel1
       and telefone.tel <> :num_tel2
       and telefone.tel <> :num_tel3
       Into :NUM_TEL4;

       Select TELEFONE.TEL from TELEFONE
       Where TELEFONE.COD_ALUNO = :COD_ALUNO
       and telefone.tel <> :num_tel1
       and telefone.tel <> :num_tel2
       and telefone.tel <> :num_tel3
       and telefone.tel <> :num_tel4
       Into :NUM_TEL5;

    suspend;
   END
END
/* ------------- final da SP ------------------------- */


[]s
força sempre.
ate +++

-- 
Luiz "RedDevil" Stefanski - Linux User #399026
http://www.RedDevil.eti.br - Delphi 4 Powered by IBObjects
exemplos e dicas sobre o IBObjects:
http://www.firebase.com.br/cgi-bin/firebase.cgi/dnld?ID=165
compilaçao/instalaçao do IBObjects sabor BPG:
http://www.firebase.com.br/cgi-bin/firebase.cgi/artigo?ID=630



Post By John Kennedy:
> Chegado, estou fazendo um exemplo pre supondo que tabela de telefones
> existe vinculo com a tabela de aluno.
> 
> Alguma explicações.
> Observe o Inicio do código for select onde Aluno - e tabela de Aluno.
> Abaixo no laço de comando Do. Select Telefone e a tabela de Telefone.
> For Select (Tabela(Aluno)).(Campo_COD_Aluno),(Campo.Nom_Aluno) etc.
>>From Tabela(Aluno)
> 
> Into:  Parametro de saida... dados que você quer obter.
>  NUM_TELEFONE VARCHAR(10),  -- TELEFONE (TABELA DE TELEFONE)
>  NOME_ALUNO VARCHAR (10),    -- NOME DO ALUNO (TABELA DE ALUNO)
>  CODIGO VARCHAR (100),              -- CODIGO DO ALUNO (TABELA DE ALUNO)
>  IDADE_ALUNO VARCHAR (30))   -- IDADE DO ALUNO (TABELA DE ALUNO)
> Observe que joguei.. somente  Into :NOME_ALUNO, :CODIGO, :IDADE_ALUNO
> porque refere-se a tabela de Aluno
> Abaixo em
> Do
> Begin
> Onde eu pego o telefone do Aluno.
> 
>    Select TELEFONE.TEL from TELEFONE
>       Where TELEFONE.COD_ALUNO =:COD_ALUNO
>       Into :NUM_TELEFONE;  -- Lembra-se acima eu passei esta variavel
> (TELEFONE) como parametro de saida. agora eu estou pegando o tel.
> 
> Qualquer duvida....
> 
> Valeu.... parceiro.
> 
> 
> 
> 
> CREATE PROCEDURE TESTE_TEL (
>     COD_ALUNO VARCHAR (10),
> RETURNS (
>     NUM_TELEFONE VARCHAR(10),
>     NOME_ALUNO VARCHAR (10),
>     CODIGO VARCHAR (100),
>     IDADE_ALUNO VARCHAR (30))
> AS
> BEGIN
>   For Select ALUNO.COD_ALUNO, ALUNO.NOM_ALUNO, ALUNO.IDADE_ALUNO
>       From ALUNO
>       Where (ALUNO.COD_ALUNO =:COD_ALUNO)
>       Into :NOME_ALUNO, :CODIGO, :IDADE_ALUNO
>   Do
>   Begin
>       Select TELEFONE.TEL from TELEFONE
>       Where TELEFONE.COD_ALUNO =:COD_ALUNO
>       Into :NUM_TELEFONE;
>    suspend;
>   END
> END
> 
> Em 31/10/05, Denis Rocha<denisrocha em hotmail.com> escreveu:
> 
>>Oi Pessoal,
>>
>>Estou querendo montar uma Store procedure. Mas estou me embananando todo.
>>Nem sei se tem como fazer.
>>É o seguinte. Preciso de dados de duas tabela ( alunos e telefones ).
>>
>>Como faço para que a procedure retorne os dados das duas tabelas ?
>>
>>O que quero é retornar os dados do aluno, e depois um telefone só do aluno
>>( podem ter vários ), é aí que está o problema. Pois a procedure vai
>>retornar mais que uma linha e aí dá pau.
>>
>>Obrigado.





Mais detalhes sobre a lista de discussão lista