Maison > base de données > Oracle > le corps du texte

Comment écrire une pagination dans Oracle

PHPz
Libérer: 2023-04-04 14:13:27
original
4739 Les gens l'ont consulté

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
Copier après la connexion

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 :

  1. La requête interne trie d'abord les enregistrements de la table EMPLOYEE en fonction de la taille ROWNUM, et attribue un numéro ROWNUM à chaque enregistrement.
  2. La requête externe opère ensuite sur l'ensemble de résultats de la requête interne, en utilisant WHERE rn > (:page - 1) * :pageSize pour filtrer les données avec le numéro de page et le numéro d'enregistrement spécifiés.

É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
Copier après la connexion

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 :

  1. Triez d'abord les enregistrements de la table EMPLOYEE selon emp_id.
  2. OFFSET (:page - 1) * :pageSize ROWS spécifie le nombre de lignes à ignorer, c'est-à-dire la position de l'enregistrement de départ à interroger dans la table triée.
  3. FETCH NEXT :pageSize ROWS ONLY spécifie le nombre d'enregistrements à interroger, c'est-à-dire le nombre d'enregistrements affichés sur chaque page.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!