在写查询前N条记录时,出现ORA-00923的Error:
查询语句:“SELECT TOP 20 NWID,NWTITLE,NW,NWEDITTIME,NWIMG FROM YW_NEWS ORDER BY NWEDITTIME DESC”出错提示:Message = "ORA-00923: 未找到要求的 FROM 关键字\n"
表名与关键字之间添加空格了,找不出原因来;而这种存在曲解的查询语句“SELECT NWID,NWTITLE,NW,NWEDITTIME,NWIMG
FROM YW_NEWS WHERE ROWNUM<=20 ORDER BY NWEDITTIME DESC”却可以执行无误。
其他测试情况:
(1)"SELECT TOP 1 NWID,NWTITLE,NW,NWEDITTIME,NWIMG FROM YW_NEWS ORDER BY NWEDITTIME DESC"
Error:the same error
(2)"SELECT NWID,NWTITLE,NW,NWEDITTIME,NWIMG FROM YW_NEWS ORDER BY NWEDITTIME DESC"
Excute ok
难倒是Top关键字出错?
Go on...
(3)"SELECT TOP 2 * FROM YW_NEWS ORDER BY NWEDITTIME DESC"
Error:the same error
推断跟top的记录条数还有选择部分字段or所有字段无关,还可能是什么地方出错呢?
难倒跟ORDER BY 排序的字段有关??
Go on...
(4)“SELECT TOP 2 * FROM YW_NEWS ORDER BY NWID DESC”
Error:the same error
NWID为表的索引,据此推断,跟order by排序的字段无关;那么还能是什么原因呢?
总算知道原因了,原来Oracle不支持TOP N 查询方式,需要用order by和rownum结合实现。。。
修改更新的语句应该为:
SELECT NWID, NWTITLE, NW, NWEDITTIME, NWIMG
FROM (SELECT * FROM YW_NEWS ORDER BY NWEDITTIME DESC)
WHERE ROWNUM <= 20
ORDER BY ROWNUM ASC测试OK。