Maison > Article > base de données > Comment écrire une pagination dans Oracle
Oracle est un système de gestion de base de données relationnelle très populaire qui fournit de riches fonctions de langage SQL, notamment des instructions OFFSET et FETCH pour la pagination. Dans le développement réel, nous devons souvent utiliser la pagination pour optimiser l'efficacité des requêtes et améliorer l'expérience utilisateur. Cet article explique comment implémenter la fonction de pagination dans Oracle.
1. Utilisez ROWNUM pour la pagination
Oracle dispose d'une pseudo-colonne ROWNUM intégrée, qui attribue des nombres numériques dans l'ordre et peut être utilisée pour les opérations de pagination. Nous pouvons obtenir l'ensemble des résultats via une requête, puis utiliser ROWNUM pour filtrer les données avec le numéro de page et le numéro d'enregistrement spécifiés.
Par exemple, supposons que nous ayons une table nommée EMPLOYEE et que nous devions interroger la page 2 et afficher 10 enregistrements sur chaque page. Vous pouvez utiliser l'instruction SQL suivante pour implémenter la pagination.
SELECT * FROM ( SELECT ROWNUM rn, e.* FROM EMPLOYEE e WHERE ROWNUM <= :page * :pageSize ) WHERE rn > (:page - 1) * :pageSize
Parmi eux, :page et :pageSize sont des paramètres, indiquant le numéro de page à interroger et le nombre d'enregistrements affichés sur chaque page. Le processus spécifique de cette instruction SQL est le suivant :
Étant donné que ROWNUM est alloué après le tri, la requête interne doit d'abord trier les données, sinon les résultats de la pagination seront incertains.
Il convient de noter que si le résultat de la requête ne comporte qu'un seul enregistrement, l'utilisation de l'instruction SQL ci-dessus peut rendre l'ensemble de résultats vide. La solution est de changer WHERE rn > (:page - 1) :pageSize en WHERE rn BETWEEN ((:page - 1) :pageSize + 1) AND (:page * :pageSize).
2. Utilisez la pagination OFFSET et FETCH
À partir d'Oracle 12c, il prend en charge la pagination à l'aide des instructions OFFSET et FETCH. Cette méthode ne nécessite pas l'utilisation de ROWNUM et la syntaxe est plus concise et claire. Voici un exemple d'utilisation de OFFSET et FETCH pour implémenter la pagination :
SELECT * FROM EMPLOYEE ORDER BY emp_id OFFSET (:page - 1) * :pageSize ROWS FETCH NEXT :pageSize ROWS ONLY
Parmi eux, :page et :pageSize représentent respectivement le numéro de page à interroger et le nombre d'enregistrements affichés sur chaque page. Le processus spécifique de cette instruction SQL est le suivant :
Soyez prudent lorsque vous utilisez les instructions OFFSET et FETCH pour interroger. Si le nombre d'enregistrements interrogés est inférieur à une page, le résultat de la requête sera vide. Dans ce cas, nous devons calculer manuellement le nombre d'enregistrements restants et filtrer à l'aide de la clause WHERE.
3. Résumé
Ce qui précède présente deux méthodes pour implémenter la fonction de pagination dans la base de données Oracle : en utilisant ROWNUM et en utilisant OFFSET et FETCH. Les deux méthodes ont leurs propres avantages et inconvénients, et les développeurs peuvent choisir la méthode appropriée en fonction de scénarios d'application spécifiques.
Il convient de noter que afin d'améliorer l'efficacité des requêtes, des index appropriés doivent être utilisés lors de la pagination. Dans le même temps, si les résultats de la requête dépassent 1 000, la requête de pagination doit être convertie en requête par lots pour éviter de renvoyer trop de données dans une seule requête.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!