使用 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 by
在select * from table_name
部分之后。以上是关于使用 LIMIT 时 SQL 命令未正确结束的主要内容,如果未能解决你的问题,请参考以下文章
ORA-00933: 运行创建序列命令时 SQL 命令未正确结束
ORA-00933: 使用 CROSS APPLY 时 SQL 命令未正确结束