精华内容
下载资源
问答
  • 详解Oracle12CFETCH FIRST语法及功能

    千次阅读 2019-04-22 16:24:35
    FETCH FIRST 10 PERCENT ROWS ONLY 2、包含相同结果 FETCH FIRST 10 PERCENT ROWS WITH TIES Connected to Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 Connected as epcr...

     语法:

    1、不包含相同结果

         FETCH FIRST 10 PERCENT ROWS ONLY

    2、包含相同结果

         FETCH FIRST 10 PERCENT ROWS WITH TIES

    Connected to Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 
    Connected as epcrmapp@10.37.96.118:1521/ncbtcrmpdb
    
    SQL>  --查询IFS_EPCUST_VALUE_INFO表数据总量
    SQL> select count(*) from IFS_EPCUST_VALUE_INFO; 
      COUNT(*)
    ----------
         36520
    
    SQL> --查询活期金额最少的前10%的行,包括金额相同的行
    SQL> select count(*) from(select * from IFS_EPCUST_VALUE_INFO order by current_bal fetch first 10 percent rows with TIES);
      COUNT(*)
    ----------
         27594
    
    SQL> --查询活期金额等于0的行数
    SQL> select count(*) from IFS_EPCUST_VALUE_INFO where current_bal=0;
      COUNT(*)
    ----------
         27594
    
    SQL> --查询活期金额最少的前10%的行,不包括金额相同的行
    SQL> select count(*) from( select * from IFS_EPCUST_VALUE_INFO order by current_bal fetch first 10 percent rows only);
      COUNT(*)
    ----------
          3652
    
    SQL> --查询活期金额最大的前10行,不包括金额相同的行
    SQL> select count(*) from( select * from IFS_EPCUST_VALUE_INFO order by  current_bal desc  fetch first 10  rows only);
      COUNT(*)
    ----------
            10
    
    SQL>  --查询活期金额最小的前10行,包括金额相同的行
    SQL> select count(*) from( select * from IFS_EPCUST_VALUE_INFO order by  current_bal  fetch first 10  rows with TIES);
      COUNT(*)
    ----------
         27594
    
    SQL> 
    

     

    展开全文
  • 在db2中如果想获取前n行,只要加上fetch first n rows only 就可以了,但在oracle中没有fetch,网上很多人说可以用oracle的rownum SQL>select rownum,id,age,name from loaddata;  ROWNUM ID AGE NAME  ----...

     在db2中如果想获取前n行,只要加上fetch first n rows only 就可以了,但在oracle中没有fetch,网上很多人说可以用oracle的rownum<=n来替代db2的fetch first n rows only,但这样的替换,在对结果集需要进行order by之后再获取前n行时,是不对的。根据我的试验,rownum的顺序好像是和rowid相对应的,而rowid的顺序是根据插入表中的数据的顺序有关(不知道oracle真正的实现机制是不是这样,有时间找本oracle的书系统研究一下)。看下面oracle中的实例:

    SQL>select rownum,id,age,name from loaddata;
         ROWNUM ID     AGE NAME
         ------- ------ --- ------
             1 200001 22   AAA
             2 200002 22   BBB
             3 200003 22   CCC
             4 200004 22 DDD
             5 200005 22   EEE
             6 200006 22   AAA

    SQL>select rownum ,id,age,name from loaddata order by name;
         ROWNUM ID     AGE NAME
         ------- ------ --- ------
             1 200001 22   AAA
             6 200006 22   AAA
             2 200002 22   BBB
             3 200003 22   CCC
             4 200004 22   DDD
             5 200005 22   EEE

        所以,要是想排序后在取前几行,可以用子查询select rownum ,id,age,name from (select * from loaddata order by name);

        但我觉得既然要使用子查询,与其使用oracle的特定函数rownum,倒还不如使用标准sql的函数row_number() over ()。可以这样写select id,age,name from (select row_number() over (order by name) as row_number,id,age,name from loaddata ) where row_number<n; 这样的话就不用考虑是在db2还是oracle下了,都一样用。

    展开全文
  • 今天发现一个奇怪的问题,就是使用FETCH FIRST 5 ROWS ONLY语句,oracle一直提示语句错误。 纠结了半天。 本机器安装的是oracle XE精简版,服务器安装的是oracle11g。在服务器上面执行是正常的。 所以可以判断...

    今天发现一个奇怪的问题,就是使用FETCH FIRST 5 ROWS ONLY语句,oracle一直提示语句错误。

    纠结了半天。

    本机器安装的是oracle XE精简版,服务器安装的是oracle11g。在服务器上面执行是正常的。

    所以可以判断精简版不支持该语句。


    展开全文
  • 几乎都是官方文档上的内容。 [OFFSEToffset {ROW|ROWS} ] ...[FETCH{FIRST|NEXT}[ { rowcount | percentPERCENT} ] {ROW|ROWS} {ONLY|WITH TIES} ] row_limiting_clause The row_limit...
    几乎都是官方文档上的内容。
     
     
    [ OFFSET offset { ROW | ROWS} ]
    [ FETCH { FIRST | NEXT }[ { rowcount | percent PERCENT } ]
        { ROW| ROWS } { ONLY | WITH TIES } ]






     
    row_limiting_clause
     
    The row_limiting_clause allows you to limit therows returned by the query. You can
    specify an offset, and number of rows or percentageof rows to return. You can use this
    clause to implement top-N reporting. For consistentresults, specify the order_by_
    clauseto ensure a deterministic sort order.

    row_limiting_clause允许限制返回行的个数。
    可以指定offset和行数(或者百分比)来返回行。
    可以使用这个子句去实现top-N报表。
    为保证一致性,需要指定order_by 子句以确定排列顺序。

     
     
     
    OFFSET

    Use this clause to specify the number of rows toskip before row limiting begins.
    offset must be a number. If you specify a negativenumber, then offsetis treated as
    0. If you specify NULL, or a number greater than orequal to the number of rows
    returned by the query, then 0 rows are returned. Ifoffsetincludes a fraction, then the
    fractional portion is truncated. If you do notspecify this clause, then offsetis 0 and
    row limiting begins with the first row.

     
    使用这个子句可以指定跳跃多少行开始计数。
    offset必须为一个数字。
    如果指定一个附属,那么会被当作0来处理。
    如果指定为null,或者数字大于结果集的行数,就会返回0行。
    如果offset是一个小数,那么小数点会被截取。
    如果没有offset子句,那么默认为0,从第一行开始计数。


     
     
    ROW | ROWS  
     
    These keywords can be usedinterchangeably and are provided for
    semantic clarity.
     
     
    这些关键字使语义更加准确



     
     
    FETCH

    Use this clause to specify the number of rows orpercentage of rows to return. If you
    do not specify this clause, then all rows arereturned, beginning at row offset+ 1.

     
    使用这个子句去指定返回行的个数或者返回行的百分比。如果没有指定,那么所有的行都会被返回,开始行为offset+1。


     
     
    FIRST | NEXT

    These keywords can be used interchangeably and areprovided for
    semantic clarity.

     
    这些关键字使语义更加准确



     
     
    rowcount| percent PERCENT  
     

    Use rowcount to specify the number of rows toreturn.
    rowcount must be a number. If you specify anegative number, then rowcountis
    treated as 0. If rowcountis greater than the numberof rows available beginning at row
    offset+ 1, then all available rows are returned. Ifrowcount includes a fraction, then
    the fractional portion is truncated. If rowcountisNULL, then 0 rows are returned.

    Use percent PERCENT to specify the percentage ofthe total number of selected rows to
    return. percent must be a number. If you specify anegative number, then percentis
    treated as 0. If percentis NULL, then 0 rows arereturned.
    If you do not specify rowcountor percent PERCENT,then 1 row is returned.

     
    使用rowcount去指定返回多少行。
    rowcount必须为一个数字,如果指定了一个负数,那么rowcount会被当作0。如果rowcount大于以offset+1开始计数的所有行个数,那么所有的行都会被返回。
    如果rowcount是一个小数,那么小数部分会被截断。如果rowcount为null,那么返回0行。
    使用percent去指定返回总行数的百分比。必须为一个数字。如果指定为负数,那么会被当作0。
    如果为null,那么返回0行。(其实都是一个套路嘛)


     
     
    ROW | ROWS  
     
    These keywords can be usedinterchangeably and are provided for
    semantic clarity.
     
     
    这些关键字使语义更加准确




     
     
    ONLY | WITH TIES

    Specify ONLYto return exactly the specified numberof rows or
    percentage of rows.
     
    指定only会返回明确的行数或者是百分比的行数。



    Specify WITH TIES to return additional rows withthe same sort key as the last row
    fetched. If you specify WITH TIES, then you mustspecify the order_by_clause. If you
    do not specify the order_by_clause, then noadditional rows will be returned.
     
    如果指定with ties子句,那么拥有和最后一行相同的排序键值的行都会被fetch。如果指定了with ties子句,那么必须指定order by 。如果没有指定order by,那么不会有附加的行被返回。



     
     
    Restrictions on the row_limiting_clause

    This clause is subject to thefollowing
    restrictions:
     
    ■ You cannot specify this clause with the for_update_clause.
    ■ If you specify this clause, then the select list cannot contain thesequence
    pseudocolumns CURRVALor NEXTVAL.
    ■ Materialized views are not eligible for an incremental refreshif the defining query
    contains the row_limiting_clause.


    row_limiting_clause子句的限制:
    无法指定for update子句
    无法包含序列的伪列currentval或者nextval
    如果定义的查询语句中包含row_limiting_clause,那么无法在这之上创建增量刷新的 物化视图

     

     

     

    下面为可能发生的错误举例:
     

    1、
    SELECT employee_id, last_name
    FROM employees
    ORDER BY employee_id
    OFFSET 5 ROWS FETCH first 5 ROWS ONLY for update ;

     


    SELECT employee_id, last_name
    *
    ERROR at line 1:
    ORA-02014: cannot select FOR UPDATE from view withDISTINCT, GROUP BY, etc.

     



    2、

    SELECT seq.currval,employee_id, last_name
    FROM employees
    ORDER BY employee_id
    OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY
    /
    
    
    SELECT seq.currval,employee_id, last_name
               *
    ERROR at line 1:
    ORA-02287: sequence number not allowed here

     


     

    3、

    CREATE MATERIALIZED VIEW LOG ON employees withprimary key ;
    
    Materialized view log created.
    
    
    
    CREATE MATERIALIZED VIEW mym REFRESH FAST AS
    (
    SELECT employee_id, last_name
    FROM employees
    ORDER BY employee_id
    FETCH FIRST 5 ROWS ONLY
    )
    /
    
    
    FETCH FIRST 5 ROWS ONLY
                *
    ERROR at line 6:
    ORA-12015: cannot create a fast refresh materializedview from a complex query

     



    CREATE MATERIALIZED VIEW mym REFRESH FAST AS
    SELECT employee_id, last_name
    FROM employees
    ORDER BY employee_id
    /
    
    Materialized view created.
    
    
    
    CREATE MATERIALIZED VIEW mym
    as
    SELECT employee_id, last_name
    FROM employees
    ORDER BY employee_id
    FETCH FIRST 5 ROWS ONLY
    /
    
    
    FETCH FIRST 5 ROWS ONLY
    *
    ERROR at line 6:
    ORA-00933: SQL command not properly ended

     

    记住加括号
    CREATE MATERIALIZED VIEW mym
    as
    (SELECTemployee_id, last_name
    FROM employees
    ORDER BY employee_id
    FETCH FIRST 5 ROWS ONLY)
    /

     


    Materialized view created.

    默认是按需更新的物化视图所以没有什么问题。


    先来几个例子

     

    Row Limiting: Examples

     

    The following statement returns the 5 employeeswith the
    lowest employee_id values:

     

     

     
    下面返回的是empid 最小的5 行。

     

    SELECT employee_id, last_name
    FROM employees
    ORDER BY employee_id
    FETCH FIRST 5 ROWS ONLY;

     

     

     
    这里将FIRST 换成NEXT 或者将ROWS 换成ROW 都没有什么区别,但是拥有这些关键字是必须的。也证明了官档上说的它们的作用是让语义更加准确。



    EMPLOYEE_ID LAST_NAME
    ----------- -------------------------
    100 King
    101 Kochhar
    102 De Haan
    103 Hunold
    104 Ernst




    下面返回的是跳过empid最小的5行的下5行数据。



    SELECT employee_id, last_name
    FROM employees
    ORDER BY employee_id
    OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY;

     

     



    offset  不提供percent 功能…



    EMPLOYEE_ID LAST_NAME
    ----------- -------------------------
    105 Austin
    106 Pataballa
    107 Lorentz
    108 Greenberg
    109 Faviet




    下面返回的是薪水最小的5% 的数据。



    SELECT employee_id, last_name
    FROM employees
    ORDER BY employee_id
    OFFSET 5 ROWS FETCH NEXT 5 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




      使用了with ties 子句,下面的语句返回最小薪水的5% 的数据,附加和最后一行相同薪水的数据。
     
    SELECT employee_id, last_name
    FROM employees
    ORDER BY employee_id
    OFFSET 5 ROWS FETCH NEXT 5 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
    131 Marlow 2500
    140 Patel 2500
    144 Vargas 2500
    182 Sullivan 2500
    191 Perkins 2500
     
    如果通过上面的例子还没有完全搞懂,那么就看下面的官方文档的翻译吧。




    Perform top-N queries by specifying an offset, andthe number of rows or
    percentage of rows to return.

     
    可以通过指定偏移量、需要返回的行数来实现top-n 查询



     

    转载于:https://www.cnblogs.com/CandiceW/p/10030936.html

    展开全文
  • 在db2中如果想获取前n行,只要加上fetch first n rows only 就可以了,但在oracle中没有fetch,网上很多人说可以用oracle的rownum SQL>select rownum,id,age,name from loaddata;  ROWNUM ID AGE NAME  ----...
  • Q63. Examine the following query:SQL... SELECT prod_id, amount_soldFROM salesORDER BY amount_soldFETCH FIRST 5 PERCENT ROWS ONLY;What is the output of this query?A. It displays 5 percent of the produ...
  • DB2sql——fetch first n rows only

    千次阅读 2018-05-22 14:25:00
    在db2中如果想获取前n行,只要加上fetch first n rows only 就可以了,但在oracle中没有fetch,网上很多人说可以用oracle的rownum<=n来替代db2的fetch first n rows only,但这样的替换,在对结果集需要进行order...
  • spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
  • DB2:FETCH FIRST 1 ROWS ONLY

    千次阅读 2017-06-08 14:15:00
    DB2:FETCH FIRST 1 ROWS ONLY,在Oracle中使用where rownum=1代替 DB2: SELECT INSTORAGENO FROM ( SELECT max(AUDITINGTIME) AUDITINGTIME ,INST...
  • select employee_id, first_name,salary from hr.employees order by employee_id fetch first 20 percent rows only; Which method a used by the optimizer to limit the rows being returned? A....
  • select employee_id, first_name, salary from hr.employees order by employee_id fetch first 20 percent row only; Which method a used by the optimizer to limit the rows being returned? A. A filter is
  • Oracle Fetch子句

    2019-03-25 22:19:20
    Oracle Fetch子句 Oracle Fetch子句 作者:初生不惑Oracle基础评论:0 条Oracle技术QQ群:175248146 在本教程中,将学习如何使用OracleFETCH子句来限制查询返回的行数。 Oracle FETCH子句简介 一些RDBMS(如...
  • 诡异的fetch first n rows only !!

    千次阅读 2015-10-16 17:19:41
    诡异的fetch first n rows only !!   前天解决了系统一个历史科目分页查询的bug,虽然当时解决了,但并不知道造成bug的具体原因。于是,这两天通过查资料和测试终于知道了bug产生的原因     bug描述:系统...
  • [20130918]12c FETCH FIRST和绑定变量.txthttp://connormcdonald.wordpress.com/2013/09/11/12c-fetch-first/重复测试:@verBANNER...
  • 转载自:...Database 12c的FETCH FIRST ROWS特性可以简化老版本中ROW_NUM()或ROWNUM的分页排序写法, 大幅节约开发花在分页查询语句上的时间。
  • Oracle/PLSQL FETCH Statement

    2018-11-18 03:10:26
    Oracle/PLSQL FETCH Statement
  • FETCH子句在Oracle中可以用来限制查询返回的行数,本教程将教大家如何使用FETCH子句。Oracle FETCH子句语法以下说明了行限制子句的语法:OFFSET子句OFFSET子句指定在行限制开始之前要跳过行数。OFFSET子句是可选的。...
  • oracle游标fetch SQL cursor is one of the most popular database objects. It is used to retrieve data from the result set of an SQL query one row at a time. Even if the cursor is not recommended fro...
  • Oracle批量fetch的小技巧

    千次阅读 2014-07-25 13:36:02
    在一般的情况下,使用批量fetch的几率并不是很多,但是Oracle提供了这个功能我们最好能熟悉一下,说不定什么时候会用上它。 以下是代码片段:  declare   cursor c1 is select * from t_depart;  ...
  • The row_limiting_... | ( subquery ) { [ order_by_clause ] [OFFSET offset { ROW | ROWS }] [FETCH { FIRST | NEXT } [{ row_count | percent PERCENT }] { ROW | ROWS } { ONLY | WITH TIES }] 摘自oracle大学
  • oracle12c有了一些新特性,其中的CDB/PDB有些趣味,fetchfirst解决了我抱怨已久的没有简单的取前几行,后几行以及类似mssqlserver中TOP的使用,VARCHAR2的扩展更不用说了,以后可以越来越少的用LONG字段。...
  • 12c Oracle新特性—FETCH

    2016-08-23 15:20:03
    Oracle 12c中为了方便数据的分页显示操作,专门提供了FETCH语句,使用此语句可以方便地取得指定范围内的操作数据。 语法: SELECT [DISTINCT] 分组字段1 [AS] [列别名],分组字段2 [AS]...
  • Oracle/PLSQL: FETCH Statement The purpose of using a cursor, in most cases, is to retrieve the rows from your cursor so that some type of operation can be performed on the data. After declaring a.....
  • Oracle游标的for与fetch

    千次阅读 2014-11-08 14:01:53
    使用隐式游标和显式游标: 1.查询返回单行记录时→隐式游标; 2.查询返回多行记录并逐行进行处理时→显式游标 --显示游标属性 declare CURSOR cur_emp IS SELECT * FROM ...FETCH cur_emp INTO row_emp; WH
  • 然而自 Oracle 8i 起,Oracle 为我们提供了 fetch bulk collect 来批量取游标中的数据。它能在读取游标中大量数据的时候提高效率,就像 SNMP 协议中,V2 版比 V1 版新加了 GET-BULK PDU 一样,也是用来更高效的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,869
精华内容 5,147
关键字:

fetchfirstoracle