Retornando a qtd de linhas de um cursor

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
ulissescarmello
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Ter, 07 Dez 2010 9:10 pm
Localização: Araraquara - SP

Boa noite pessoal.
Gostaria de saber se existe alguma função que retorna a quantidade de linhas de um cursor. Utilizo um cursor explícito e dos atributos que verifiquei o que mais se aproximaria é o %ROWCOUNT mas vi que ele retorna a qtd de linhas processadas até o momento. Existe algum outro atributo ou eu teria que "descarregar" este cursor em uma tabela PL/SQL ou há ainda outra alternativa?
rafaelfrocha
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 45
Registrado em: Qua, 31 Out 2007 9:30 am
Localização: Uberlândia
Rafael Rocha

Experimente utilizar o count(*) over () dentro do seu select.
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

É... sem criar um campo dentro da query pra fzer isso acredito que a única solução é o rowcount mesmo.

Se quer todas do cursor pega ele após o loop . Ou faz como lhe foi dito, cria um campo novo na query com a função count pra saber a quantidade de linhas da consulta.
ulissescarmello
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Ter, 07 Dez 2010 9:10 pm
Localização: Araraquara - SP

Então, no meu caso, de acordo com a quantidade de linhas retornadas no cursor, eu tomo uma determinada ação, por isso julguei que o %ROWCOUNT não funcionaria, pois eu só teria o total de linhas após todas as iterações.
Se eu usar o count(1) vou sempre ter a qtd 1, pois se eu retornar por exemplo, 3 linhas no cursor, o count retornará 1 para cada linha.... mas como funciona o over()? É uma função?
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

O over te permite definir um agrupamento apenas para a coluna do count, sem ter de agrupar o restante da query.

a ideia é que teu count retorne a quantidade de registros da query em todas as colunas.

Posta o teu select pra ver o que podemos fazer.
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Tenta aí.

Selecionar tudo

SELECT QRY.ID_COBRANCA_PARCEIRO, 
QRY.NUM_CONTRATO, 
QRY.CID_CONTRATO, 
QRY.VLR_COBRANCA, 
QRY.ID_SIT_COBRANCA, 
QRY.DT_VENCTO, 
QRY.DT_BAIXA, 
QRY.VLR_REPASSADO, 
COUNT (*) OVER () 
FROM ( "QUERY" ) QRY  
ulissescarmello
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Ter, 07 Dez 2010 9:10 pm
Localização: Araraquara - SP

Opa... Obrigado!!! Resolveu sim.
Responder
  • Informação
  • Quem está online

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