Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Acessando o 2º elemento na coluna varray


Você precisa selecionar as linhas 1 e 2 e, em seguida, descobrir uma maneira de filtrar as linhas anteriores indesejadas - uma maneira é usar a agregação com um CASE instrução para corresponder apenas à segunda linha:

SQL Fiddle

Configuração do esquema 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 |

Não está funcionando porque:para a primeira linha na consulta interna correlacionada, ROWNUM é 1 e seu filtro é WHERE ROWNUM = 2 então isso reduz para WHERE 1=2 e o filtro não corresponde e a linha é descartada. A linha subsequente será testada em relação a um ROWNUM de 1 (já que a linha anterior não está mais na saída e não terá um número de linha), que novamente falhará no teste e será descartada. Repita, ad nauseum e todas as linhas falham no WHERE filtram e são descartados.