[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.