आपको पंक्तियों 1 और 2 का चयन करना होगा और फिर अवांछित पूर्ववर्ती पंक्तियों को फ़िल्टर करने का एक तरीका निकालना होगा - एक तरीका CASE
के साथ एकत्रीकरण का उपयोग करना है केवल दूसरी पंक्ति से मेल खाने के लिए कथन:
Oracle 11g R2 स्कीमा सेटअप :
CREATE TABLE mytable ( myvarraycolumn ) AS
SELECT SYS.ODCINUMBERLIST( 1, 2, 3 ) FROM DUAL UNION ALL
SELECT SYS.ODCINUMBERLIST( 4, 5, 6 ) FROM DUAL;
क्वेरी 1 :
SELECT (
SELECT MAX( CASE ROWNUM WHEN 2 THEN COLUMN_VALUE END )
FROM TABLE( t.myvarraycolumn )
WHERE ROWNUM <= 2
) AS second_element
FROM mytable t
परिणाम :
| SECOND_ELEMENT |
|----------------|
| 2 |
| 5 |
यह काम नहीं कर रहा है क्योंकि:सहसंबद्ध आंतरिक क्वेरी में पहली पंक्ति के लिए, ROWNUM
है 1
और आपका फ़िल्टर WHERE ROWNUM = 2
. है फिर यह कम होकर WHERE 1=2
. हो जाता है और फ़िल्टर का मिलान नहीं होता है और पंक्ति को छोड़ दिया जाता है। उसके बाद अगली पंक्ति का परीक्षण ROWNUM
. के विरुद्ध किया जाएगा का 1
(चूंकि पिछली पंक्ति अब आउटपुट में नहीं है और इसमें कोई पंक्ति संख्या नहीं होगी), जो फिर से परीक्षण में विफल हो जाएगी और उसे छोड़ दिया जाएगा। दोहराएँ, विज्ञापन रुकना और सभी पंक्तियाँ विफल हो जाती हैं WHERE
फ़िल्टर करते हैं और छोड़ दिए जाते हैं।