Oracle
 sql >> Database >  >> RDS >> Oracle

Accesso al 2° elemento nella colonna varray

È necessario selezionare le righe 1 e 2 e quindi trovare un modo per filtrare le righe precedenti indesiderate:un modo è utilizzare l'aggregazione con un CASE istruzione in modo che corrisponda solo alla seconda riga:

SQL Fiddle

Impostazione dello schema 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;

Query 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

Risultati :

| SECOND_ELEMENT |
|----------------|
|              2 |
|              5 |

Non funziona perché:per la prima riga della query interna correlata, ROWNUM è 1 e il tuo filtro è WHERE ROWNUM = 2 quindi questo si riduce a WHERE 1=2 e il filtro non corrisponde e la riga viene eliminata. La riga successiva verrà quindi testata rispetto a un ROWNUM di 1 (poiché la riga precedente non è più nell'output e non avrà un numero di riga), che fallirà nuovamente il test e verrà scartato. Ripeti, fino alla nausea e tutte le righe non superano il WHERE filtro e vengono scartati.