12c新特性

限制行的子句允许限制查询返回的行。可以指定偏移量,以及要返回的行数或百分比。您可以使用此子句实现Top-N报告。要获得一致的结果,请指定ORDER_by子句以确保具有确定性的排序顺序。

[ OFFSET offset { ROW | ROWS } ]
[ FETCH { FIRST | NEXT } [ { rowcount | percent PERCENT } ]
{ ROW | ROWS } { ONLY | WITH TIES } ]

OFFSET

使用此子句指定行限制开始前要跳过的行数。偏移量必须是数值或计算为数值的表达式。如果指定负数,则偏移量将被视为0。如果指定为空,或者指定的数字大于或等于查询返回的行数,则返回0行。如果偏移量包含小数,则小数部分被截断。如果不指定该子句,则偏移量为0,行限制从第一行开始。ROW和ROWS关键字的含义相同,同时提供单数和复数形式,会使OFFSET子句读起来更自然。

FETCH

使用此子句指定要返回的行数rowcount或百分比percent。如果不指定该子句,则返回所有行,从行号OFFSET+1开始到最后一行。FIRST和NEXT关键字的含义相同,用于澄清语义。

使用rowcount指定要返回的行数。rowcount必须是数值或计算结果为数值的表达式。如果指定一个负数,则行数将被视为0。如果行数大于行偏移量+1处开始的可用行数,则返回所有可用行。如果行数包含小数部分,则小数部分将被截断。如果rowcount为空,则返回0行。使用percent PERCENT指定要返回的选定行总数的百分比。百分比必须是数值或计算为数值的表达式。如果指定一个负数,则百分比将被视为0。如果百分比为空,则返回0行。如果不指定行数或百分比,则返回1行。ROW和ROWS关键字的含义相同,用于澄清语义。

关键字ONLY或WITH TIES应与ROW/ROWS关键字一起使用。ROW ONLY返回指定的行数或行百分比。ROW WITH TIES会通过检索上一行时使用的关键字,提取出其他行,但必须指定order by子句才有效。如果您没有指定ORDER_BY_子句,那么不会返回其他行。

本子句受以下限制:

不能将此子句与for_update子句一起指定。

如果指定此子句,则选择列表不能包含序列伪列currval或nextval。

如果定义查询包含行限制子句,则物化视图不符合增量刷新的条件。

如果选择列表包含具有相同名称的列,并且指定了row_limiting子句,则会发生ORA-00918错误。无论同名列在同一个表中还是在不同的表中,都会发生此错误。可以通过为同名列指定唯一的列别名来解决此问题。

示例:

返回employees中employee_id最低的5行:

SELECT employee_id, last_name
FROM employees
ORDER BY employee_id
FETCH FIRST 5 ROWS ONLY; EMPLOYEE_ID LAST_NAME
----------- -------------------------
100 King
101 Kochhar
102 De Haan
103 Hunold
104 Ernst

返回employees中employee_id最低的5行后的5行:

SELECT employee_id, last_name
FROM employees
ORDER BY employee_id
OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY; EMPLOYEE_ID LAST_NAME
----------- -------------------------
105 Austin
106 Pataballa
107 Lorentz
108 Greenberg
109 Faviet

返回employees中salary最低的5%行:

SELECT employee_id, last_name, salary
FROM employees
ORDER BY salary
FETCH FIRST 5 PERCENT ROWS ONLY; EMPLOYEE_ID LAST_NAME SALARY
----------- ------------------------- ----------
132 Olson 2100
128 Markle 2200
136 Philtanker 2200
127 Landry 2400
135 Gee 2400
119 Colmenares 2500

返回employees中salary最低的5%行及salary等于最低5%的最后一行的其他行:

SELECT employee_id, last_name, salary
FROM employees
ORDER BY salary
FETCH FIRST 5 PERCENT ROWS WITH TIES; EMPLOYEE_ID LAST_NAME SALARY
----------- ------------------------- ----------
132 Olson 2100
128 Markle 2200
136 Philtanker 2200
127 Landry 2400
135 Gee 2400
119 Colmenares 2500
131 Marlow 2500
140 Patel 2500
144 Vargas 2500
182 Sullivan 2500
191 Perkins 2500

Oracle 限制行的子句的更多相关文章

  1. Oracle中“行转列”的实现方式

    在报表的开发当中,难免会遇到行转列的问题. 以Oracle中scott的emp为例,统计各职位的人员在各部门的人数分布情况,就可以用“行转列”: scott的emp的原始数据为: EMPNO ENAM ...

  2. [转]Oracle 多行的数据合并

    本文转自:http://www.2cto.com/database/201203/125287.html Oracle合并行范例   现有如下数据 id name 1 a1 2 a2 3 a3 1 b ...

  3. oracle学习----行级锁的理解

    通过实验来理解行级锁的发生 1.创建需要的表 SQL> conn / as sysdba已连接.SQL> create table dept as select * from scott. ...

  4. Oracle 多行转多列

    Oracle 多行转多列,列值转为列名   前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容; 之后需要到处问卷明细,,,,麻烦来咯 于是到网上到处搜索,没有直接结果;于是又找各种相似的 ...

  5. Oracle多行记录合并的几种方法

    今天正好遇到需要做这个功能,顺手搜了一下网络,把几种方法都列出来,方便以后参考. 1 什么是合并多行字符串(连接字符串)呢,例如: SQL> desc test; Name Type Nulla ...

  6. Oracle字符串行拆分成列的三种方式

    Oracle字符串行拆分成列的三种方式 --muphy 开发过程中经常会遇到将前台多个值用逗号连接一同传递到后台查询,这个用逗号连接的字符串分隔的每个字符串分别对应Oracle数据库表的不同行. 如下 ...

  7. Oracle命令行中显示:ORA-04076: 无效的 NEW 或 OLD 说明

    Oracle命令行进行操作时可能出现"ORA-04076: 无效的 NEW 或 OLD 说明" 需要在条件语句中JOB前面添加“old.”即可(因为是在when条件里面,所以不用“ ...

  8. Oracle 11g行字段拼接WMSYS.WM_CONCAT问题Not A LOB

    Oracle 11g行字段拼接WMSYS.WM_CONCAT问题Not A LOB 一.问题出现 项目中的某个查询需要将表中某个字段不重复地拼接起来,百度得到该函数WMSYS.WM_CONCAT(字段 ...

  9. 面试题:oracle数据库行转列的问题

    今天我一个学弟问了一个面试题: 有表A,结构如下:A: p_ID p_Num s_id1 10 011 12 022 8 013 11 013 8 03其中:p_ID为产品ID,p_Num为产品库存量 ...

随机推荐

  1. ThinkPHP5 基础知识入门 [入门必先了解]

    一.目录结构 下载最新版框架后,解压缩到web目录下面,可以看到初始的目录结构如下: project 应用部署目录 ├─application 应用目录(可设置) │ ├─common 公共模块目录( ...

  2. Angularjs 标签使用整理

    持续更新..... 一.select setmealList为接收到的集合数据,sname 是要显示的字段,Object属性 套餐类型:<select style="width: 15 ...

  3. 将map对象参数转换成String=String&方式

    * 将map对象参数转换成String=String&方式 * @param params * @param charset * @return * @throws UnsupportedEn ...

  4. 报错:ImportError: cannot import name "KafkaProducer" from "kafka"

    报错背景: 在Pycharm中安装完成kafka-python之后,我开始在代码中引入kafka的包. from kafka import KafkaProducer 但是引入之后报错 报错现象: 报 ...

  5. git bush 无法使用箭头进行选择

    1 找到git bash 的安装目录,找到bash.bashrc文件, 2 在文件的尾部加上:alias vue='winpty vue.cmd', 3 重启git bash 即可 来自:https: ...

  6. QT源码分析:QTcpServer

    最近在看有关IO复用方面的内容,自己也用标准c++库实现了select模型.iocp模型.poll模型.回过头来很想了解QT的socket是基于什么模型来实现的,所以看了QT关于TcpServer实现 ...

  7. appium 弹窗处理

    测试过程中遇到两类弹窗: 系统权限弹窗具体业务弹窗系统权限弹窗Android系统权限弹窗一般出现在安装 app 后首次打开,如:定位权限.电话权限等.我们可以按顺序执行测试用例,将该类操作放到 Ini ...

  8. docker+k8s基础篇五

    Docker+K8s基础篇(五) service资源介绍 A:service资源的工作特性 service的使用 A:service字段介绍 B:ClusterIP的简单使用 C:NodePort的简 ...

  9. Vue学习笔记(20190722)

  10. Tkinter & mysql 的登录框练习

    import tkinter as tk from tkinter import messagebox import pymysql class SignIn(object): def __init_ ...