8 votes

Obtenir le nombre total de lignes dans la requête de pagination

J'ai la requête suivante pour la pagination des enregistrements

SELECT *
  FROM (SELECT e.*, 
               ROWNUM row_num
          FROM (SELECT emp_no,
                       emp_name,
                       dob 
                  from emp) outr
          WHERE ROWNUM < ( (pagenum * row_size) + 1))
 WHERE  row_num >= ( ( (pagenum  - 1) * row_size) + 1)

Je voudrais également obtenir le nombre de lignes dans la même requête et pour cela j'ai essayé d'utiliser

COUNT(*) OVER ()

cependant, je n'obtiens pas des résultats précis lorsque je passe à la page suivante et aux lignes suivantes.

Comment puis-je utiliser COUNT(*) OVER () efficacement?

12voto

Vincent Malgrat Points 42899

Une requête de pagination typique avec le nombre total de lignes serait :

SELECT *
  FROM (SELECT outr.*,
               ROWNUM row_num
          FROM (SELECT emp_no,
                       emp_name,
                       dob,
                       count(*) over () total_nb
                  FROM emp
                 ORDER BY ...) outr
         WHERE ROWNUM < ((pagenum * row_size) + 1))
 WHERE row_num >= (((pagenum - 1) * row_size) + 1)

N'oubliez pas le ORDER BY.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X