2009-01-28 7 views
5

Une des applications dont je m'occupe lors de la vérification d'une table Oracle DB toutes les x secondes pour voir s'il y a de nouvelles données à traiter (autre application en temps réel). Notre nouveau processus métier client force notre temps réel à peupler cette table avec beaucoup d'enregistrements en même temps (disons 10 000), mais seulement quelques fois par jour. La prochaine fois que mon application vérifie s'il y a quelque chose à traiter, elle rencontre 10 000 enregistrements et essaie de traiter cela.Limitation de l'enregistrement renvoyé d'une requête SQL dans Oracle

Ce n'est pas très bien conçu et il n'est pas assez bon. Une solution rapide serait de limiter le nombre d'enregistrement de l'application obtient d'Oracle, la prochaine fois, il choisira une autre 50 (ou autre), etc.

Comment puis-je limiter dans Oracle SQL le nombre d'enregistrements renvoyés? L'ordre compte!

select * 
    from cool_table where date >= to_date('200901010000', 'YYYYMMDDhh24mi') 
order by seq_nr, entry_dts; 

Répondre

15
select * from 
(select c.* from cool_table c 
    where date >= to_date('200901010000', 'YYYYMMDDhh24mi') 
    order by seq_nr, entry_dts) 
where rownum < 50 

Vous devez vous assurer de la commande est effectuée avant le filtrage rownum (sinon il prendra les 50 premières lignes qu'il trouve, puis de les commander)

1

A partir de Oracle 12c supporte enfin la option standard ANSI fetch first n rows:

select * 
from cool_table where date >= to_date('200901010000', 'YYYYMMDDhh24mi') 
order by seq_nr, entry_dts 
fetch first 50 rows only; 

Cela peut être combiné avec un décalage pour la pagination:

select * 
from cool_table where date >= to_date('200901010000', 'YYYYMMDDhh24mi') 
order by seq_nr, entry_dts 
offset 50 rows 
fetch first 50 rows only; 
Questions connexes