2016-06-15 86 views
0

我正在查詢並嘗試從數據庫中獲取一行隨機數,但Oracle一直告訴我我的命令沒有正確結束。Oracle 11g OFFSET FETCH給出了錯誤

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

這是我正在使用的代碼。

我將不勝感激任何支持,因爲我花了相當一段時間尋找我得到的結果的解釋,但無濟於事。

+1

這是一個Oracle 12功能,但你的標籤說Oracle 11g,請參閱http://stackoverflow.com/questions/470542/how-do-i-limit-the-number-of-rows-returned-by-an-oracle - 訂購後查詢 – kevinsky

+0

謝謝。我不知道該功能在我的版本中不可用。 –

回答

2

該語法在Oracle Database 12c之前無效。

你會說,而不是

select * 
from random_table 
order by random_col 
where rownum < 11 
+0

謝謝。我不知道該功能在我的版本中不可用。 –

+0

以下是12c新功能列表https://docs.oracle.com/database/121/LNPLS/release_changes.htm#LNPLS113 – thatjeffsmith

+1

從句法上看,這是有效的。然而在功能上,它做了一件非常不同的事情。此查詢從表中返回任意10行,不一定包含具有頂部「random_column_name」值的10行。您必須在嵌套子查詢外部使用'order by'子句和'rownum <= 10'子句嵌套子查詢。 –

2

MSSQL:

offset 10 rows fetch first 10 rows only 

甲骨文:

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

甲骨文(適用於版本12C前):

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