Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Vinicius Cruz_30878

[Resolvido] Stored Procedure

Recommended Posts

Boa tarde pessoal.. um novato aqui, então desculpe qualquer coisa.

 

Seguinte, estou desenvolvendo uma aplicação no trabalho e estou no modulo de relatório

para carregar meu relatório eu uso um dataset.. até ai tranquilo.

Mas agora eu quero deixar o código mais limpo e ir em busca de desempenho, jogando as consultas em procedimentos

dai gostaria de saber como retornar um tipo Table do procedimento, não consigo de jeito nenhum... pesquisei que só e nada..

 

Até agora o procedure está assim:

 

create or replace
PROCEDURE ORA_PROG_TEC_ANALITICO_REL(ANO IN NUMBER, TEC IN NUMBER) IS



 CURSOR PROGRAMACAO_TIPOS_BENEF is
   select dsc_tpo_benef, qtd_benef, idt_tec
     from (select tpoben.dsc_tpo_benef,
                  proben.idt_mun,
                  sum(proben.qtd_benef) qtd_benef,
                  proben.idt_tec
             from srx_programacao_tipo_benef proBen
             join srx_tipos_beneficiarios tpoBen
               on tpoben.idt_tpo_benef = proben.idt_tpo_benef
            where proben.ano_pms = ANO
            group by tpoben.dsc_tpo_benef, proben.idt_mun, proben.idt_tec
           UNION
           select 'TODOS' DES_TPO_BENEF,
                  proben.idt_mun,
                  sum(proben.qtd_benef) qtd_benef,
                  proben.idt_tec
             from srx_programacao_tipo_benef proBen
             join srx_tipos_beneficiarios tpoBen
               on tpoben.idt_tpo_benef = proben.idt_tpo_benef
            where proben.ano_pms = ANO
            group by 'TODOS', proben.idt_mun, proben.idt_tec)
    where idt_tec = TEC;

BEGIN

 OPEN PROGRAMACAO_TIPOS_BENEF;

 -- Só testando o cursor 
 FOR R1 IN PROGRAMACAO_TIPOS_BENEF LOOP
   dbms_output.put_line(R1.DSC_TPO_BENEF || '   ' || R1.QTD_BENEF);
 END LOOP;

END ORA_PROG_TEC_ANALITICO_REL;

 

 

Se alguém puder me ajudar... eu agradeço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não vejo vantagens em usar SP´s para isto.

 

Parece ser uma aplicação em Delphi, é isto ?

 

Creio Tquery resolve o problema com sobra.

 

Mas querendo usar SP´s estas deveriam retornar um Type TCursor.

 

Veja este exemplo que usamos aqui no trabalho para Crystal Reports.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não vejo vantagens em usar SP´s para isto.

 

Parece ser uma aplicação em Delphi, é isto ?

 

Creio Tquery resolve o problema com sobra.

 

Mas querendo usar SP´s estas deveriam retornar um Type TCursor.

 

Veja este exemplo que usamos aqui no trabalho para Crystal Reports.

 

A aplicação é em C# para web, usando ReportView para criar os relatórios.

 

Então deixa eu ver se entendi, antes eu tenho que criar uma PACKAGE para nela criar uma variavel do tipo cursor?

 

e esse cursor de retorno me retorna todos os registros da consulta mesmo? pq vi em alguns lugares que retornava só a primeira linha.

 

Bom, vou implementar a solução aqui agora baseado nesse exemplo

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta solução é para Crystal Reports.para C# não sei se funcionaria.

 

No caso de um sql simples um objeto que trata sql resolve o problema.

 

Deixe SP para questões de processamento mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta solução é para Crystal Reports.para C# não sei se funcionaria.

 

No caso de um sql simples um objeto que trata sql resolve o problema.

 

Deixe SP para questões de processamento mesmo.

 

É que achei que seria bom para limpar o código... as consultas são grandes.. essa ai é a menor... e pra cada relatório eu tenho umas 4 consultas

 

Bom, primeiro obrigado, a solução que você me propôs funcionou perfeitamente.

 

Agora gostaria de tirar outra duvida

 

Tem como eu passar uma espécie de array como parametro para o stored procedure fazer um filtro?

 

ex: um array de id_municipios para filtrar pelos municipios selecionados na aplicação

 

Obrigado, desde já grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você quer fazer um parametro do tipo in.

 

... where municipio in (1,12,43,57) ...

 

Fiz uma solução uma vez baseada no AskTom, mas achei que ficou lenta.

 

Veja aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você quer fazer um parametro do tipo in.

 

... where municipio in (1,12,43,57) ...

 

Fiz uma solução uma vez baseada no AskTom, mas achei que ficou lenta.

 

Veja aqui.

 

Valeu Motta.

 

Eu vou dar uma olhada mais tarde e retorno com a resposta se funcionou ou não.

 

Agora, o que você quer dizer com deixar SP apenas para processamento? Você pode da um exemplo especifico para eu entender melhor?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Procedures para (exemplos)

 

Gerar faturamento

Rodar baixa do arquivo do banco

etc

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza Motta.

 

Funcionou segundo o modelo mostrado.

 

Mas já vejo um atraso só em desenvolver assim... mas só por conhecimento agora.

 

Eu seleciono lá na minha aplicação 3 municipios, digamos, dai ele filtra. Tranquilo. Na aplicação se eu não seleciono nada ele retorna todos os municipios. Isso por que estou gerando os filtro dinamicamente no código.

 

Você vê alguma forma de fazer isso no banco, na Procedure ?

 

Desde já grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

As vezes faço assim.

 

Seja pcodmun o parametro de busca do municipio

 

na query faça

 

WHERE ... AND COD_MUNICIPIO = NVL(pcodmun,COD_MUNICIPIO) ...

 

Assim se for passado um municipio retornará este se não for passado retorna todos.

 

Era isto ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

As vezes faço assim.

 

Seja pcodmun o parametro de busca do municipio

 

na query faça

 

WHERE ... AND COD_MUNICIPIO = NVL(pcodmun,COD_MUNICIPIO) ...

 

Assim se for passado um municipio retornará este se não for passado retorna todos.

 

Era isto ?

 

 

Sim sim.. Mas desse jeito eu posso passar varios codigos de municipio como o where in ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não para isto (IN) faça a solução do #6.

 

 

Valeu, eu entendi. O que eu queria saber era se tinha algo que mesclasse os dois métodos.

 

Mas você já me mostrou que o mais vantajoso mesmo é não fazer usando Procedure

 

Obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.