语法:
[ OFFSET offset { ROW | ROWS} ] [ FETCH { FIRST | NEXT }[ { rowcount | percent PERCENT } ] { ROW| ROWS } { ONLY | WITH TIES } ]
fetch
返回 emp表中sal最小的5行
SCOTT@EMREP> select sal,ename from emp
2 order by sal
3 fetch first 5 rows only;
返回结果
SAL ENAME ---------- ---------- 800 SMITH 950 JAMES 1100 ADAMS 1250 WARD 1250 MARTIN
关键字rows换成row,结果不变。first换成next结果不变。
SCOTT@EMREP> select sal,ename from emp order by sal fetch first 5 row only; SAL ENAME ---------- ---------- 800 SMITH 950 JAMES 1100 ADAMS 1250 WARD 1250 MARTIN
SCOTT@EMREP> select sal,ename from emp order by sal fetch next 5 row only;
SAL ENAME
---------- ----------
800 SMITH
950 JAMES
1100 ADAMS
1250 WARD
1250 MARTIN
offset 跳过sal最小的5行的,下5行数据:
offset不提供 percent功能
SCOTT@EMREP> select sal,ename from emp order by sal offset 5 rows fetch next 5 rows only; SAL ENAME ---------- ---------- 1300 MILLER 1500 TURNER 1600 ALLEN 2450 CLARK 2850 BLAKE
percent:薪水最少的5%的数据
SCOTT@EMREP> select sal,ename from emp order by sal fetch first 5 percent rows only; SAL ENAME ---------- ---------- 800 SMITH SCOTT@EMREP> select sal,ename from emp order by sal fetch next 5 percent row only; SAL ENAME ---------- ---------- 800 SMITH
with ties 附加最后一行相同的薪水数据
SCOTT@EMREP> select sal,ename from emp order by sal fetch first 5 percent rows with ties;
row_limiting_clause允许限制返回行的个数。
可以指定offset和行数(或者百分比)来返回行。
可以使用这个子句去实现top-N报表。
为保证一致性,需要指定order_by 子句以确定排列顺序。
offset
使用这个子句可以指定跳跃多少行开始计数。
offset必须为一个数字。
如果指定一个附属,那么会被当作0来处理。
如果指定为null,或者数字大于结果集的行数,就会返回0行。
如果offset是一个小数,那么小数点会被截取。
如果没有offset子句,那么默认为0,从第一行开始计数。
fetch
使用这个子句去指定返回行的个数或者返回行的百分比。如果没有指定,那么所有的行都会被返回,开始行为offset+1。
percent/rowcount
使用rowcount去指定返回多少行。
rowcount必须为一个数字,如果指定了一个负数,那么rowcount会被当作0。如果rowcount大于以offset+1开始计数的所有行个数,那么所有的行都会被返回。
如果rowcount是一个小数,那么小数部分会被截断。如果rowcount为null,那么返回0行。
使用percent去指定返回总行数的百分比。必须为一个数字。如果指定为负数,那么会被当作0。
如果为null,那么返回0行。
ONLY | WITH TIES
指定only会返回明确的行数或者是百分比的行数。
如果指定with ties子句,那么拥有和最后一行相同的排序键值的行都会被fetch。如果指定了with ties子句,那么必须指定order by 。
如果没有指定order by,那么不会有附加的行被返回。
限制
row_limiting_clause子句的限制:
无法指定for update子句
无法包含序列的伪列currentval或者nextval
如果定义的查询语句中包含row_limiting_clause,那么无法在这之上创建增量刷新的物化视图。