行1と2を選択してから、不要な先行行を除外する方法を検討する必要があります。1つの方法は、CASEで集計を使用することです。 2行目のみに一致するステートメント:
Oracle11gR2スキーマのセットアップ :
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に失敗します フィルタして破棄されます。