[firebase-br] Cursor

Edson de Paulo epaulo2002 em yahoo.com.br
Qui Set 13 16:53:34 -03 2007


	Pessoal desculpem a insistência, mas alguém pode me dizer se tem como 
retornar um select de uma procedure selecionável sem ter que 
obrigatoriamente declarar variáveis para cada campo que será retornado 
pela procedure. Abaixo está uma das procedures como exemplo.

	Se tiver como fazer por favor me enviem a documentação ou um exemplo 
simples de como fazer. Obrigado.

-- 
Edson de Paulo
Curitiba - PR





Edson de Paulo escreveu:
> Paulo, quase me ofendi com o abominável, mas entendi o que você quis 
> dizer. hehehe
> 	O que realmente acontece é que assumi um software em andamento e estou 
> utilizando Crystal reports para desenvolver os relatórios, tenho por 
> prática criar uma procedure para cada relatório ao invés de fazer a 
> vinculação das tabelas pelo Crystal, assim eu não preciso mexer no RPT 
> sempre que preciso alterar a regra de negócio do relatório e o 
> desenvolvimento fica mais limpo e prático, e muitas outras vantagens que 
> eu vejo, já que utilizo apenas recursos do banco e a regra toda fica no 
> banco.
> 	O que eu quero saber na verdade é como eu faço na declaração da 
> procedure para retornar os campos do meu select sem ter que declarar um 
> parâmetro para cada campo do select, veja como ficou minha procedure 
> atualmente:
> 
> CREATE PROCEDURE prcRelDiversosVlr (  codComitente INTEGER
>                                     , codLeilao    INTEGER
>                                     , sLeilao      CHAR(1)
>                                     , sGuarda      CHAR(1)
>                                     , sDevolucao   CHAR(1))
> RETURNS (  codDiverso    INTEGER
>           , cod_com       INTEGER
>           , descComitente VARCHAR(50)
>           , cod_bco       INTEGER
>           , descColigada  VARCHAR(50)
>           , lei_cod       INTEGER
>           , descLeilao    VARCHAR(40)
>           , dtLeilao      DATE
>           , horaLeilao    VARCHAR(4)
>           , lot_num       INTEGER
>           , dat_ent       DATE
>           , dat_sai       DATE
>           , div_met       NUMERIC(10, 2)
>           , vlr_lei       NUMERIC(10, 2)
>           , vlr_com       NUMERIC(10, 2)
>           , vlr_mer       NUMERIC(10, 2)
>           , vlr_ven       NUMERIC(10, 2)
>           , cod_mov       VARCHAR(1))
> AS
> BEGIN
>    FOR SELECT div.codigo
>             , div.cod_com
>             , div.
>             , com.nome
>             , div.cod_bco
>             , col.descricao
>             , div.lei_cod
>             , lei.descricao
>             , lei.data
>             , lei.hora
>             , div.lot_num
>             , div.dat_ent
>             , div.dat_sai
>             , div.div_met
>             , div.vlr_lei
>             , div.vlr_com
>             , div.vlr_mer
>             , div.vlr_ven
>             , div.cod_mov
>        FROM diverso div
>           INNER JOIN coligada col ON (div.cod_bco = col.codigo) AND 
> (div.cod_com = col.codigo_comitente)
>           INNER JOIN comitente com ON (col.codigo_comitente = com.codigo)
>           INNER JOIN leiloes lei ON (div.lei_cod = lei.codigo)
>        WHERE com.codigo = :codComitente
>          AND lei.codigo = :codLeilao
>          AND div.cod_mov IN (:sLeilao, :sGuarda, :sDevolucao)
>        INTO codDiverso, cod_com, descComitente, cod_bco, descColigada, 
> lei_cod, descLeilao
>           , dtLeilao, horaLeilao, lot_num, dat_ent, dat_sai, div_met, 
> vlr_lei, vlr_com
>           , vlr_mer, vlr_ven, cod_mov
>    DO
>    BEGIN
>      SUSPEND;
>    END
> END
> 
> repare que no returns tenho vários parâmetros e agora mesmo preciso 
> adicionar mais 1 tabela e 5 campos, imagine que conforme o relatório 
> serão muitos parâmetros. Então queria aprender se existe como declarar o 
> procedimento fazendo o retorno do meu select sem ter que criar 1 
> parâmetro para cada campo. Entendeu? Então se existir como e você puder 
> me dizer como fazer essa declaração, eu agradeço. Pergunto pois não 
> encontrei na documentação.
> 
> 	Acho que em meu e-mail anterior tentei generalizar e passei a impressão 
> errada.
> 
> Valew
> 
> --
> Edson de Paulo
> Curitiba - PR
> 
> 
> 
> 
> 
> paulosxs Yahoo! escreveu:
>> Edson, tanto o Oracle quanto o MS SQL possuem essa capacidade. No 
>> entanto, apesar da flexibilidade, isso não é uma prática recomendada no 
>> desenvolvimento de um sistema bem estruturado. Mesmo matematicamente, 
>> considerando o conceito de função, no qual essas procedures se 
>> enquadram, é abominável. Claro que quem decide é o desenvolvedor, mas, 
>> por uma questão de boas práticas, recomendo padronizar a estrutura de 
>> retorno ou criar uma procedure para cada estrutura de retorno.
>>





Mais detalhes sobre a lista de discussão lista