sql >> Base de Datos >  >> RDS >> Oracle

Accediendo al segundo elemento en la columna varray

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:

SQL Fiddle

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

Resultados :

| 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.