Debe seleccionar las filas 1 y 2 y luego encontrar una forma de filtrar las filas anteriores no deseadas; una forma es usar la agregación con un CASE
instrucción para que solo coincida con la segunda fila:
Configuración del esquema de 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;
Consulta 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 |
No funciona porque:para la primera fila de la consulta interna correlacionada, ROWNUM
es 1
y su filtro es WHERE ROWNUM = 2
entonces esto se reduce a WHERE 1=2
y el filtro no coincide y la fila se descarta. La fila subsiguiente luego se probará contra un ROWNUM
de 1
(dado que la fila anterior ya no está en la salida y no tendrá un número de fila), que nuevamente fallará la prueba y será descartada. Repita, ad nauseum y todas las filas fallan en WHERE
se filtran y se desechan.