使用 LIMIT 时 SQL 命令未正确结束

Posted

技术标签:

【中文标题】使用 LIMIT 时 SQL 命令未正确结束【英文标题】:SQL command not properly ended when using LIMIT 【发布时间】:2016-12-02 09:32:13 【问题描述】:

我正在 SQL Developer 中执行以下查询。

SELECT * FROM Person where person_name='rahul' order by created_time desc limit 10;

当我执行它时,SQL Developer 给了我以下错误。

ORA-00933: SQL command not properly ended
00933. 00000 -  "SQL command not properly ended"
*Cause:    
*Action:

我使用以下链接作为参考。

https://www.techonthenet.com/sql/select_limit.php

我已经试过了

SELECT * FROM Person where person_name='rahul' order by created_time desc OFFSET 5 ROWS FETCH NEXT 10 ROWS ONLY;

ORA-00933: SQL command not properly ended
00933. 00000 -  "SQL command not properly ended"
*Cause:    
*Action:
Error at Line: 1 Column: 75

请注意,OFFSET 不被视为关键字。

【问题讨论】:

删除 ; ? 没有。还是一样。 【参考方案1】:

是的,那是因为 Oracle 没有或不支持 limit 子句,因此您会收到 ORA-00933 错误。相反,使用FETCH .. OFFSET 构造类似

SELECT * FROM Person 
where person_name='rahul' 
order by created_time desc 
OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY;

*** 中有很多类似的问题。应该尝试搜索相同的。比如这个:How do I limit the number of rows returned by an Oracle query after ordering?

【讨论】:

【参考方案2】:

我已使用以下查询解决了该问题。

SELECT * FROM Person where person_name='rahul' and rownum between 1 and 2 order by created_time desc;

【讨论】:

【参考方案3】:

如果你得到

ORA-00933: SQL command not properly ended
00933. 00000 -  "SQL command not properly ended"
*Cause:    
*Action:

这可能是因为您没有运行 Oracle 12。在这种情况下,有一些变通方法,都涉及子查询并且最草率。我用过

select * from 
    ( select column_name, ROWNUM rnum from 
        ( select * from table_name) 
    where ROWNUM <= max_row )
where rnum  >= min_row order by column_name;

【讨论】:

请注意,因为order by 不在最里面的子查询中,它只会对最外面的子组进行排序。基本上,如果您有 1000 条记录,并且您获取 100-125 条记录,它将获得一组随机的 25 条记录并对其进行排序。我想你想要order byselect * from table_name 部分之后。

以上是关于使用 LIMIT 时 SQL 命令未正确结束的主要内容,如果未能解决你的问题,请参考以下文章

使用子查询时“SQL 命令未正确结束”

ORA-00933: 运行创建序列命令时 SQL 命令未正确结束

SQL命令未正确结束是啥原因,去掉;也不行

ORA-00933: 使用 CROSS APPLY 时 SQL 命令未正确结束

ORA-00933: SQL 命令未正确结束 00933. 00000 - “SQL 命令未正确结束

SQL 错误:ORA-00933:SQL 命令未正确结束 00933。00000 -“SQL 命令未正确结束”