Oracle 11g OFFSET FETCH 给出错误

And*_*iev 4 sql oracle oracle11g

我正在查询并尝试从数据库中获取随机数量的行,但 Oracle 一直告诉我我的命令没有正确结束。

select *
from random_table
order by random_column_name
offset 0 rows
fetch first 10 rows only
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码。

我将不胜感激任何支持,因为我花了相当多的时间寻找我得到的结果的解释,但无济于事。

tha*_*ith 10

该语法直到 Oracle Database 12c 才有效。

你会说

select *
from random_table
where rownum < 11
order by random_column_name;
Run Code Online (Sandbox Code Playgroud)

  • 从语法上讲,这是有效的。然而,在功能上,它做了一件非常不同的事情。此查询从表中返回任意 10 行,不一定是具有顶部“random_column_name”值的 10 行。您必须在嵌套子查询之外使用带有 `order by` 子句和 `rownum &lt;= 10` 子句的嵌套子查询。 (3认同)

Bri*_*ian 5

上述方法在 Oracle 11.2 中都不适合我,所以这是另一种方法

select * from (
  select random_table.*,
         row_number() over (ORDER BY update_date DESC) line_number
   FROM random_table where status = 100
) WHERE line_number between 5 AND 10
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我添加了对状态的过滤并按最新的 update_date 进行排序,但可以是任何内容。

这里的分页由起点 (5) 和终点 (10) 确定,如上所示。如果需要的话,这使得根据页码和页面大小(在本例中为页面 2,页面大小为 5)进行计算变得容易。