Contando a quantidade de registros de um cursor

[ad#texto]

Uma coisa que geralmente o pessoal reclama no PL/SQL é a falta de um comando que retorne o total de linhas retornadas em um cursor, sem a necessidade de realizar um FETCH, afinal lembrem-se, performance acima de tudo.

Embora a Oracle não tenha colocado nada diretamente a partir da versão 9i é possível utilizar o OVER() em conjunto com o COUNT() dentro do SELECT, fica bem simples e não é precisa utilizar a cláusula GROUP BY.

Veja um exemplo:

DECLARE
 
CURSOR teste IS
 SELECT 1 valor,COUNT(1) OVER() valor2
 FROM minha_tabela;
 
 testerr  teste%rowtype;
 
BEGIN
 OPEN teste;
 fetch teste INTO testerr;
 
 dbms_output.put_line('Linhas: ' || testerr.valor2);
END;

Notaram que basta apenas buscar o valor do campo VALOR2 que o total de linhas que será retornado será resgatada, sem a necessidade de ficar iterando sobre o FETCH para então contar linha a linha.

Uma outra forma é este outro exemplo:

DECLARE
CURSOR teste IS
 SELECT 1 valor, last_value(rownum) OVER() valor2
 FROM minha_tabela;
 
 testerr  teste%rowtype;
 
BEGIN
 OPEN teste;
 fetch teste INTO testerr;
 
 dbms_output.put_line('Linhas: ' || testerr.valor2);
END;

Também é funcional como a primeira forma.

Petter Rafael
Petter Rafael

Desenvolvedor Web atua com as tecnologias Java e PHP apoiadas pelos bancos de dados Oracle e MySQL. Além dos ambientes de desenvolvimento acima possuiu amplo conhecimento em servidores Apache/Tomcat, Photoshop, Arte & Foto, Flash e mais uma dezena de ferramentas e tecnologias emergentes. Atualmente colabora com o Viablog escrevendo sobre programação e tecnologia.

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Junte-se a 325 outros assinantes

Busca

julho 2020
DSTQQSS
 1234
567891011
12131415161718
19202122232425
262728293031 

Categorias