行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
に失敗します フィルタして破棄されます。