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:
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, ROWNUM
là 1
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ỏ.