Pouvez-vous s'il vous plaît me guider à l'équivalent de cette requête dans Oracle:Comment puis-je effectuer cette requête dans Oracle
SELECT SQL_CALC_FOUND_ROWS * FROM tableName
SELECT FOUND_ROWS() as cnt
Merci
Pouvez-vous s'il vous plaît me guider à l'équivalent de cette requête dans Oracle:Comment puis-je effectuer cette requête dans Oracle
SELECT SQL_CALC_FOUND_ROWS * FROM tableName
SELECT FOUND_ROWS() as cnt
Merci
La requête récupère toutes les lignes de tableName
, et récupère alors le nombre de lignes dans tableName
. Faire cela avec SQL_CALC_FOUND_ROWS
est juste une optimisation des performances: cela vous évite de faire deux requêtes.
Si les performances ne sont pas un problème, un équivalent pour Oracle serait:
SELECT * FROM tableName
SELECT count(*) from tableName
Si vous êtes en mesure de réécrire le client, vous pouvez faire les deux en une seule requête:
SELECT *
, (SELECT count(*) from tableName) as totalRows
FROM tableName
Pour Oracle 9i +, utilisez:
SELECT COUNT(*) over() found_rows,
t.*
FROM TABLE t
Be aware that it is faster to run separate queries than to use SQL_CALC_ROUND_ROWS in MySQL.
Mis à jour pour indiquer que 'OVER' est une fonction analytique qui n'est pas supportée par Oracle avant 9i. –
Le SQL suivant effectue la deuxième option en un seul passage: 'sélectionnez a. *, Count (*) sur() comme total_rows à partir de [table_name] a'; –
@Adam Musch: Le faire en un seul passage n'est pas tout ce qu'il est censé être. Dans la version OP, une analyse complète de la table et un balayage complet rapide sur l'index (en supposant qu'il y en ait un) sont requis. Pour votre version, la fonction de fenêtre doit être appliquée au résultat de l'analyse complète de la table. Sous des tests limités sur une table avec plus de 9 millions de lignes, la version de l'OP est nettement plus rapide (en particulier avec l'indice des premières lignes). – Allan
@Allan - Les kilomètres parcourus peuvent toujours varier, mais il est préférable de le faire en une seule fois, à moins d'avoir une raison impérieuse (par exemple, une mémoire de tri limitée) de ne pas le faire. –