代码之家  ›  专栏  ›  技术社区  ›  Nazgob

在Oracle中限制SQL查询返回的记录

  •  5
  • Nazgob  · 技术社区  · 17 年前

    我们新的客户机业务流程迫使我们的实时数据库在同一时间(比如10000条)用大量记录填充此表,但一天只填充几次。下次我的应用程序检查是否有任何需要处理的内容时,它会遇到10000条记录并尝试处理这些记录。

    它的设计不是很好,只是规模不够大。快速修复方法是限制应用程序从Oracle获得的记录数量,下次它将选择另外50条(或任何其他)等等。

    如何在Oracle SQL中限制返回记录的数量?秩序很重要!

      select * 
        from cool_table where date >= to_date('200901010000', 'YYYYMMDDhh24mi') 
    order by seq_nr, entry_dts;
    
    2 回复  |  直到 9 年前
        1
  •  15
  •   Gary Myers    17 年前
    select * from
    (select c.* from cool_table c
       where date >= to_date('200901010000', 'YYYYMMDDhh24mi') 
       order by seq_nr, entry_dts)
    where rownum < 50
    

    您需要确保在rownum筛选之前完成排序(否则它将获取它找到的前50行,然后对它们进行排序)

        2
  •  1
  •   a_horse_with_no_name    9 年前

    fetch first n rows 选项:

    select * 
    from cool_table where date >= to_date('200901010000', 'YYYYMMDDhh24mi') 
    order by seq_nr, entry_dts
    fetch first 50 rows only;
    

    这可以与分页的偏移量结合使用:

    select * 
    from cool_table where date >= to_date('200901010000', 'YYYYMMDDhh24mi') 
    order by seq_nr, entry_dts
    offset 50 rows 
    fetch first 50 rows only;