Dificuldades com cursor e loop

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
plsqlnelba
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Ter, 13 Jan 2009 12:37 pm
Localização: Brasília - DF

Boa tarde,

Começei recentemente a usar o PL/SQL e estou com tremenda dificuldade com um relatório. Preciso tirar da tabela ficha_financeira a coluna cod_usuario e a coluna anomes_referencia e selecionar apenas os usuarios que possuem débitos durante 6 meses consecutivos ou 3 meses interpolados em 2008. Agradeço qualquer ajuda.
Diego_Mello
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 229
Registrado em: Sex, 05 Set 2008 2:59 pm
Localização: Igrejinha - RS
Diego Mello
Igrejinha - RS
www.twitter.com/diegolmello

Brother...

Tu consegue dar mais detalhes sobre o que tu quer fazer?

Posta as colunas da tua tabela ai!

:-o
plsqlnelba
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Ter, 13 Jan 2009 12:37 pm
Localização: Brasília - DF

Selecionar tudo

COD_PESSOA    NOME	       ANOMES_REFERENCIA
    147	       Nome1	            1/1/2009
    194	       Nome2	            1/6/2008
    234	       Nome2	            1/10/2008
    285	       Nome3	            1/6/2008
    285	       Nome3	            1/9/2008
    285	       Nome3	            1/11/2008
    285	       Nome3	            1/12/2008
    386	       Nome4	            1/6/2008
    468	       Nome5	            1/9/2008

é algo assim mas preciso apenas das pessoas que possuem 3 meses consecutivos ou 6 meses interpolados.
plsqlnelba
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Ter, 13 Jan 2009 12:37 pm
Localização: Brasília - DF

esse select que dei mostra todos os funcionarios que ficaram devendo horas no banco de horario no ano passado. O relatório que quero fazer é para mostrar apenas aqueles que tem exatos 5 meses ou 3 meses consecutivos. Os outros não quero em minha tabela dessa forma preciso fazer um contador ou algo parecido.
Grato
plsqlnelba
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Ter, 13 Jan 2009 12:37 pm
Localização: Brasília - DF

5 meses não 6 meses. me desculpem pelos erros de descrição
schnu
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 110
Registrado em: Ter, 24 Mai 2005 9:16 pm
Localização: Dongguan - Guangdong - China

acho q sera mais facil se você fizer uma function que retorne isso pra você, dai na function fazer loop com contador se contador for igual a que você quer retorna registro.
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Fica difícil dizer exatamente o que você quer sem conhecer o modelo de dados, mas pra resolver em uma query me parece que dá pra fazer com uma cláusula "connect by" (query hierárquica).

D uma verificada nesses exemplos na documentação da Oracle.
http://download.oracle.com/docs/cd/B193 ... m#i2060615

Pelo que entendi seria um algo assim:

Selecionar tudo

select s.cod_pessoa, s.anomes_referencia
from sua_tabela s
connect by prior trunc(s.anomes_referencia, 'MM') = add_months(trunc(s.anomes_referencia, 'MM'), 1) and prior s.cod_pessoa = s.cod_pessoa and level <= 6
Essa query traz todos os meses para os quais existem outros 6 meses consecutivos.
Você provavelmente vai precisar jogar isso numa condição where exists (subquery) e ligar pelo código pessoa com a query principal.
É um chute, porque não testei, não tenho seu ddl para a estrutura da tabela nem dados de teste. estou pensando em voz alta :lol:

De repente uma função analítica resolva isso melhor, com janela deslizante de tamanho 6, mas não pensei muito a respeito.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 6 visitantes