ROWNUM
जब तक आप क्वेरी नहीं करते हैं, तब तक असाइन नहीं किया जाता है, इसलिए आप इसका उपयोग WHERE
. में नहीं कर पाएंगे उस तरह का खंड।
आप निम्न कार्य कर सकते हैं:
SELECT COUNT(*)
FROM
(
select v1, v2, rownum rn
from Foo
) f
WHERE mod(rn,2) = 0;
ROWNUM
परिणाम सेट में पंक्ति की स्थिति है, और रिकॉर्ड्स के चयन के बाद इसका मूल्यांकन किया जाता है।
इस प्रकार की क्वेरी कभी काम नहीं करेंगी:
WHERE ROWNUM > x
WHERE ROWNUM BETWEEN x AND y
लेकिन यह काम करेगा
WHERE ROWNUM < x
चूंकि आप rownum
. का मूल्यांकन करना चाहते हैं mod
. के साथ फ़ंक्शन यह काम नहीं करेगा क्योंकि rownum
उस समय उपलब्ध नहीं है। यही कारण है कि, mod
. का उपयोग करने के लिए आपको इसे उप-क्वेरी में रखना होगा समारोह।