Oracle的偏移函數是用于在查詢結果中返回指定行的函數。它可以用于限制結果集中返回的行數,以及指定返回結果集中的起始位置。
Oracle中常用的偏移函數有兩個:
SELECT *
FROM (
SELECT t.*, ROW_NUMBER() OVER (ORDER BY column_name) AS rn
FROM table_name t
)
WHERE rn <= 10;
SELECT *
FROM table_name
WHERE ROWNUM <= 10
ORDER BY column_name;
需要注意的是,ROWNUM是在查詢結果返回之后才進行計算的,所以要先使用WHERE子句限制結果集的大小,再使用ROWNUM進行偏移,否則會得到錯誤的結果。而ROW_NUMBER()函數是在查詢結果生成時就進行計算的,所以可以直接使用WHERE子句限制結果集的大小和進行偏移。
另外,從Oracle 12c開始,引入了FETCH FIRST … ROWS ONLY子句,可以更方便地實現偏移功能。例如,使用FETCH FIRST來獲取結果集中的前10行數據:
SELECT *
FROM table_name
ORDER BY column_name
FETCH FIRST 10 ROWS ONLY;