1 votes

Est-il possible d'obtenir le nombre de lignes du jeu de résultats avec les résultats de la requête ?

Actuellement, je dois exécuter deux requêtes pour obtenir à la fois le nombre total d'éléments dans mon jeu de résultats et le jeu de résultats. Est-il possible d'obtenir le nombre de résultats et le jeu de résultats en un seul passage dans la base de données ? J'essaie d'optimiser mon code pour ne pas avoir à effectuer deux passages vers la base de données, car l'exécution de ces instructions select individuelles prend déjà plusieurs minutes. Je cherche une solution à la fois dans oracle sql et ms sql car j'utilise les deux. J'utilise également les bibliothèques d'accès Oracle de Microsoft pour accéder à la base de données Oracle et non les bibliothèques d'accès Oracle.

Merci.

2voto

Dougman Points 4517

Selon votre version d'Oracle, vous pouvez utiliser la fonction analytique count( ) pour retourner une colonne contenant le nombre total de lignes.

http://download.oracle.com/docs/cd/B28359%5F01/server.111/b28286/functions032.htm#i82697

select a.*,
       count(*) over() totalRows
  from table1 a;

1voto

Christian13467 Points 2496

Il n'y a aucune propriété de OracleCommand ou oracleDataReader qui montre les lignes récupérées. Le nombre de lignes est connu après avoir récupéré toutes les lignes.

Mais si vous récupérez toutes les données dans un jeu de résultats, alors vous avez le nombre de lignes dans le tableau suivant resultset.Tables[0].Rows.Count comme indiqué ci-dessus. Cela n'entraîne aucun coût supplémentaire pour la base de données, car le nombre est une propriété de la collection de lignes. Le nombre d'index dépend de la quantité de tables dans votre jeu de résultats.

1voto

TerrorAustralis Points 1374

OK, c'est peut-être ce que vous cherchez : @@ROWCOUNT

Il retourne le nombre de lignes affectées par la dernière opération de base de données de l'utilisateur. Il n'est donc pas nécessaire d'ajouter une colonne ou de faire une autre passe, il suffit de faire la requête et de demander @@ROWCOUNT :

SELECT @@ROWCOUNT en tant que 'Rows_Returned' (nombre de lignes retournées)

EDITAR:

Cela ne fonctionne que pour le serveur SQL. Pour Oracle, utilisez SQL%Rowcount

J'espère que cela vous aidera

0voto

Adam Hawkes Points 4632

Si vous itérez dans l'ensemble des résultats, ne serait-il pas possible d'incrémenter un compteur à chaque itération ?

Une tactique pourrait être d'ajouter une colonne count(*) as RESULTSET_SIZE ?

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