Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Mengakses elemen ke-2 di kolom varray

Anda perlu memilih baris 1 dan 2 dan kemudian mencari cara untuk memfilter baris sebelumnya yang tidak diinginkan - salah satu caranya adalah dengan menggunakan agregasi dengan CASE pernyataan hanya cocok dengan baris kedua:

SQL Fiddle

Pengaturan Skema 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;

Kueri 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

Hasil :

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

Ini tidak berfungsi karena:untuk baris pertama dalam kueri dalam yang berkorelasi, ROWNUM adalah 1 dan filter Anda adalah WHERE ROWNUM = 2 maka ini berkurang menjadi WHERE 1=2 dan filter tidak cocok dan baris dibuang. Baris berikutnya kemudian akan diuji terhadap ROWNUM dari 1 (karena baris sebelumnya tidak lagi dalam output dan tidak akan memiliki nomor baris), yang lagi-lagi akan gagal dalam pengujian dan dibuang. Ulangi, mual iklan dan semua baris gagal WHERE filter dan dibuang.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jejak SQL, 10046 acara di Oracle:trcsess, utilitas tkprof

  2. Mengambil dan menampilkan data dari database oracle

  3. Kapan saya perlu menggunakan titik koma vs garis miring di Oracle SQL?

  4. bagaimana saya bisa menyandikan string di HMAC-SHA256 menggunakan pl/sql?

  5. Mengoptimalkan ukuran pengambilan JDBC dengan menggunakan application.properties Spring Boots