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

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.
ViamaisBLOG
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.