Oracle没有MYSQL LIMIT子句,但是从12c版本开始,我们可以使用FETCH子句限制返回行数。
SELECT * FROM DUAL OFFSET ROW | ROWS FETCH FIRST | NEXT rowcount | percent PERCENT ROW | ROWS ONLY | WITH TIES ;
关键字说明:
- OFFSET ROW | ROWS 查询时限定要跳过的行数
- FETCH 关键字记住就行
- FIRST | NEXT rowcount | percent PERCENT ROW | ROWS 限定行数或者百分比
- ONLY | WITH TIES 完全按照行数限制还是返回最后一行相同的值,使用WITH TIES必须有ORDER子句
限制条件:
- 不能使用FOR UPDATE
- 不能使用序列
- 查询包含FRTCH则物化试图刷新会失败
- ORA-00918错误时,需调整重复的字段名
例子:
SELECT employee_id, last_name FROM employees ORDER BY employee_id
OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY;
12c之前怎么办?
SELECT * FROM (SELECT * FROM DUAL ORDER BY COLUMN_NAME) WHERE ROWNUM>= ? AND ROWNUM<= ?