[firebase-br] Store procedure

RedDevil reddevil em reddevil.eti.br
Qua Nov 2 22:38:47 -03 2005


ola pessoal.
tudo bem com voces?
sincerely, espero que sim...
;o)

o post que eu fiz em resposta a msg do Luis Carlos me levou a dar um look no
livro do Mr. Cantu, que foi a unica literatura que eu usei para pegar o
principio da coisa no que diz respeito a criaçao de SP's (alias, para falar a
verdade, eu aprendi SP's com um artigo do Mr. Cantu na ClubeDelphi, artigo esse
que foi revisado e ampliado para constar no livro Firebird Essencial...;o), e
olhando o livro eu percebi que existia um erro na SP do John para o Denis que eu
postei antes...

tipow assim, da maneira que eu fiz antes, quando a gente fizesse a chamada a SP
daria o erro "multiples rows in a singleton select" (algo parecido...;o), pois
eh necessario usar o "FIRST" para que um select daqueles retorne uma unica
linha... entao eu refiz a SP, testei no IBExpert e cheguei a isso ae abaixo...
dessa maneira sim retorna o telefone do aluno, os dois telefones, tres, quatro
ou ate cinco telefones que existam cadastrados:

/* ------------------------------- 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 first 1 TELEFONE.TEL from TELEFONE
       Where TELEFONE.COD_ALUNO = :COD_ALUNO
       Into :NUM_TEL1;

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

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

       Select first 1 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 first 1 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






Mais detalhes sobre a lista de discussão lista