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

Adgang til 2. element i varray-kolonnen

Du skal vælge række 1 og 2 og derefter finde en måde at filtrere de uønskede foregående rækker fra - én måde er at bruge aggregering med en CASE sætning til kun at matche den anden række:

SQL Fiddle

Oracle 11g R2 Schema Setup :

CREATE TABLE mytable ( myvarraycolumn ) AS
  SELECT SYS.ODCINUMBERLIST( 1, 2, 3 ) FROM DUAL UNION ALL
  SELECT SYS.ODCINUMBERLIST( 4, 5, 6 ) FROM DUAL;
 

Forespørgsel 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
 

Resultater :

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

Det virker ikke fordi:for den første række i den korrelerede indre forespørgsel, ROWNUM er 1 og dit filter er WHERE ROWNUM = 2 så reduceres dette til WHERE 1=2 og filteret er ikke matchet, og rækken kasseres. Den efterfølgende række vil derefter blive testet mod en ROWNUM af 1 (da den forrige række ikke længere er i outputtet og ikke vil have et rækkenummer), hvilket igen vil fejle testen og blive kasseret. Gentag, ad nauseum og alle rækker mislykkes WHERE filter og kasseres.




  1. Hvordan kan jeg bestemme installerede SQL Server-instanser og deres versioner?

  2. Arkitekturimplementering og design for et meddelelsessystem ved hjælp af socket.io node.js og indgående meddelelser

  3. Tæl rækkerne med samme ID i php

  4. Sag med doctrine2, symfony2 og postgresql entiteter