sql >> Databasteknik >  >> RDS >> Oracle

Åtkomst till det andra elementet i varray-kolumnen

Du måste välja raderna 1 och 2 och sedan hitta ett sätt att filtrera bort de oönskade föregående raderna - ett sätt är att använda aggregering med en CASE för att bara matcha den andra raden:

SQL-fiol

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;

Fråga 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

Resultat :

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

Det fungerar inte eftersom:för den första raden i den korrelerade inre frågan, ROWNUM är 1 och ditt filter är WHERE ROWNUM = 2 sedan reduceras detta till WHERE 1=2 och filtret matchas inte och raden kasseras. Den efterföljande raden kommer sedan att testas mot en ROWNUM av 1 (eftersom den föregående raden inte längre finns i utgången och inte kommer att ha något radnummer), vilket igen kommer att misslyckas i testet och kasseras. Upprepa, ad nauseum och alla rader misslyckas med WHERE filter och kasseras.




  1. Är denna implementering SQL-92-konform?

  2. MySQL Multiple Left Joins

  3. ActiveRecord kapslad SELECT

  4. phpMyAdmin - kan inte ansluta - ogiltiga inställningar - ända sedan jag lade till ett root-lösenord - låst ute