【问题标题】:Can we use select statement to fetch second set of results ignoring previous result set in the same session?我们可以使用 select 语句来获取第二组结果,而忽略同一会话中的先前结果集吗?
【发布时间】:2020-09-14 09:53:45
【问题描述】:

我正在执行一个 Oracle 查询,使用 select 语句从 100 条记录中返回 10 条记录。

现在我需要第二次执行相同的查询以在同一会话中获取下一组行(即第 11 - 20 行),依此类推。

是否可以在不使用附加列的情况下完成此操作?

【问题讨论】:

  • 请告诉我们您当前的查询。
  • 你是说每次查询都想取接下来的10行?
  • 您使用什么来执行和获取这些记录?是pl/sql还是远程客户端?
  • 好吧,如果您执行完全相同的查询(使用完全相同的 WHERE 条件),您将获得完全相同的行。这里有一个更大的画面,你没有展示。什么进程正在使用您选择的行?你打算如何跟踪你已经选择了哪些行?顺便说一句,表有行,而不是记录。

标签: sql oracle select


【解决方案1】:

从版本 12 开始,Oracle 允许通过 fetch 和 offset 命令来执行此操作

create table some_table(some_col number);

insert into some_table values(1);
insert into some_table values(2);
insert into some_table values(3);
insert into some_table values(4);

select *
  from some_table
  order by 1
  fetch first 2 rows only;

/* returns: 
   1
   2 */

select *
  from some_table
  order by 1
  offset 2 rows
  fetch first 2 rows only;

/* returns:
   3
   4 */

【讨论】:

    【解决方案2】:

    像这样? (pagination)

       SELECT * FROM (
        
            SELECT
        
              ord.*,
        
              row_number() over (ORDER BY ord.order_id ASC) line_number
        
            FROM Orders ord
        
          ) WHERE line_number BETWEEN 11 AND 20  ORDER BY line_number;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      相关资源
      最近更新 更多