Oracle 11g OFFSET FETCH给出了错误

时间:2016-06-15 13:08:11

标签: sql oracle oracle11g

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

select *
from random_table
order by random_column_name
offset 0 rows
fetch first 10 rows only

这是我正在使用的代码。

我非常感谢任何支持,因为我花了很长时间寻找我得到的结果的解释,但无济于事。

5 个答案:

答案 0 :(得分:3)

该语法在Oracle Database 12c之前无效。

你会说

select *
from random_table
order by random_col
where rownum < 11

答案 1 :(得分:3)

MSSQL:

offset 10 rows fetch first 10 rows only

甲骨文:

select *
from random_table
order by random_col
where rownum >= 10 and rownum < 20

答案 2 :(得分:1)

Oracle(适用于12c之前的版本):

select *
from (
  select *, rownum rn
  from (
    select *
    from random_table
    order by random_col) t
  where rownum <= 20) f
where rn > 10

答案 3 :(得分:1)

以上所有内容都不在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

在上面的示例中,我在最新的update_date之前对状态和顺序进行了过滤,但是可以是任何内容。

在此,分页由起点(5)和终点(10)确定,如上所示。如果需要的话,这样可以轻松地根据页码和页面大小(在这种情况下为页面2,页面大小为5)进行计算。

答案 4 :(得分:0)

我是这样做的,所以我可以进行有序的搜索,而不必冒险看不到任何结果。

WITH lista AS(SELECT *
            FROM random_table
           ORDER BY random_column_name)
SELECT *
  FROM lista
 WHERE ROWNUM <= 10;