Anda perlu memilih baris 1 dan 2 dan kemudian mencari cara untuk memfilter baris sebelumnya yang tidak diinginkan - salah satu caranya adalah dengan menggunakan agregasi dengan CASE
pernyataan hanya cocok dengan baris kedua:
Pengaturan Skema 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;
Kueri 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
Hasil :
| SECOND_ELEMENT |
|----------------|
| 2 |
| 5 |
Ini tidak berfungsi karena:untuk baris pertama dalam kueri dalam yang berkorelasi, ROWNUM
adalah 1
dan filter Anda adalah WHERE ROWNUM = 2
maka ini berkurang menjadi WHERE 1=2
dan filter tidak cocok dan baris dibuang. Baris berikutnya kemudian akan diuji terhadap ROWNUM
dari 1
(karena baris sebelumnya tidak lagi dalam output dan tidak akan memiliki nomor baris), yang lagi-lagi akan gagal dalam pengujian dan dibuang. Ulangi, mual iklan dan semua baris gagal WHERE
filter dan dibuang.