Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Dostęp do drugiego elementu w kolumnie varray

Musisz wybrać wiersze 1 i 2, a następnie wypracować sposób na odfiltrowanie niechcianych wierszy poprzedzających - jednym ze sposobów jest użycie agregacji z CASE oświadczenie pasujące tylko do drugiego wiersza:

Skrzypce SQL

Konfiguracja schematu 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;

Zapytanie 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

Wyniki :

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

Nie działa, ponieważ:w pierwszym wierszu w skorelowanym zapytaniu wewnętrznym ROWNUM to 1 a Twój filtr to WHERE ROWNUM = 2 to zmniejsza się do WHERE 1=2 a filtr nie jest dopasowany, a wiersz jest odrzucany. Kolejny wiersz zostanie następnie przetestowany pod kątem ROWNUM z 1 (ponieważ poprzedni wiersz nie jest już w danych wyjściowych i nie będzie miał numeru wiersza), który ponownie nie przejdzie testu i zostanie odrzucony. Powtarzam, ad znudzenie i wszystkie wiersze kończą się niepowodzeniem WHERE filtrować i są odrzucane.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. java.sql.SQLException:ORA-03115:nieobsługiwany typ danych sieci lub reprezentacja

  2. TO_TIMESTAMP() Funkcja w Oracle

  3. usuwanie milisekund z pola Oracle tmstmp

  4. Historia audytu wielu tabel w bazie danych

  5. Jak wywołać procedurę składowaną Oracle w Pythonie?