Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Truy cập phần tử thứ 2 trong cột varray

Bạn cần chọn hàng 1 và 2 rồi tìm cách lọc ra các hàng trước không mong muốn - một cách là sử dụng tính năng tổng hợp với CASE câu lệnh để chỉ khớp với hàng thứ hai:

SQL Fiddle

Thiết lập lược đồ 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;

Truy vấn 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

Kết quả :

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

Nó không hoạt động vì:đối với hàng đầu tiên trong truy vấn bên trong có tương quan, ROWNUM1 và bộ lọc của bạn là WHERE ROWNUM = 2 sau đó điều này giảm xuống WHERE 1=2 và bộ lọc không phù hợp và hàng bị loại bỏ. Sau đó, hàng tiếp theo sẽ được kiểm tra với ROWNUM trong tổng số 1 (vì hàng trước đó không còn trong đầu ra và sẽ không có số hàng), hàng này sẽ lại thất bại trong quá trình kiểm tra và bị loại bỏ. Lặp lại, bảo tàng quảng cáo và tất cả các hàng không có WHERE bộ lọc và bị loại bỏ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để đếm số phần tử trong tất cả các varrays Oracle từ bảng?

  2. Oracle to_date () đầu ra không chính xác

  3. Loại bỏ lỗi ORA-00942 trong tập lệnh tạo ddl

  4. Làm thế nào để kết nối từ php với Oracle DB 12c?

  5. Sự kỳ diệu của KÉP