यह देर से एक सा है, लेकिन अगर किसी को ओरेकल का उपयोग करता है, यहाँ पसीना समाधान आता है:
SELECT
q.*,
ROWNUM DB_ROWNUM,
(SELECT max(ROWNUM) FROM ($sql)) DB_COUNT
FROM
($sql) q
$ एसक्यूएल निश्चित रूप से, आपकी क्वेरी है। ओरेकल ऑप्टिमाइज़र बुद्धिमान है कि सब कुछ दो बार निष्पादित न करें।
अब प्रत्येक fetched पंक्ति में वर्तमान पंक्ति संख्या (पेजिंग ग्रिड पंक्ति संख्या के लिए उपयोगी) DB_ROWNUM में और DB_COUNT में पंक्तियों की पूरी संख्या है। तुम अब भी कम से कम एक पंक्ति लाने के लिए है (इसलिए यह ऊपर सवाल का जवाब बिल्कुल नहीं है;)), लेकिन पसीना उपयोग अगले आता है:
यह भी एक बहुत ही आसान तरीके से शुरू करना करने के लिए और Oracle में सीमा है और अभी भी पंक्तियों की पूरी नंबर मिल:
SELECT * FROM (
SELECT /*+ FIRST_ROWS($limit) */
q.*,
ROWNUM DB_ROWNUM,
(SELECT max(ROWNUM) FROM ($sql)) DB_COUNT
FROM
($sql) q
WHERE
ROWNUM <= $limit
)
WHERE
DB_ROWNUM > $start
इस के साथ
, आप वास्तव में केवल पंक्ति 51 100 करने के लिए अपने ग्रिड में दूसरे पृष्ठ के लिए प्राप्त कर सके, लेकिन अभी भी वास्तविक पंक्ति संख्या (1 से शुरू) और है प्रत्येक प्राप्त पंक्ति में पूर्ण गणना (शुरुआत और सीमा के बिना)।
स्रोत
2013-04-17 11:13:05
यहां की कुंजी मेरी क्या समझ में आई है कि क्या लाता है। मैंने सोचा कि यह किसी प्रकार का हैश वापस ले गया है और बस इसे फिर से चालू किया गया है, लेकिन वास्तव में, पूरी बात एक धारा है, इसलिए, आप डीबी से सीधे पंक्तियां ला रहे हैं (और कुछ लौटे ऑब्जेक्ट से नहीं), इसलिए, तैयार निष्पादन में वास्तव में कोई संकेत नहीं है कि कितनी पंक्तियां लौटाई गई हैं। –