[firebase-br] Store procedure

John Kennedy johnbh3 em gmail.com
Qui Nov 3 14:45:21 -03 2005


Beleza parceiro, na verdade eu não sabia que existia mais de um telefone..
O mais importante e estar envolvido, poder ajudar, contribuir para os
colegas um pouco, mas um pouco que em grandes proporções se torna
gigante.
O firebird o mundo do software livre so tende a ganhar.

Um abraço parceiro.



Em 02/11/05, RedDevil<reddevil em reddevil.eti.br> escreveu:
> 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.
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.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
>




Mais detalhes sobre a lista de discussão lista