【问题标题】:SQL command not properly ended when using LIMIT使用 LIMIT 时 SQL 命令未正确结束
【发布时间】: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 不被视为关键字。

【问题讨论】:

  • 删除 ; ?
  • 没有。还是一样。

标签: mysql oracle-sqldeveloper


【解决方案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;

StackOverflow 中有很多类似的问题。应该尝试搜索相同的。比如这个: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 部分之后。
      猜你喜欢
      • 1970-01-01
      • 2016-09-21
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      相关资源
      最近更新 更多