row_number()找不到FROM关键字

时间:2013-10-11 08:16:00

标签: sql select

我有一个sql语句,它应该选择按行号排序的表的所有内容。所以我使用了row_number函数。

但我每次都会得到错误

Exception in thread "main" java.sql.SQLSyntaxErrorException: ORA-00923: FROM keyword not found where expected

或此错误

ORA-00936: missing expression

我的陈述如下:

SELECT row_number() OVER(ORDER BY table.column1) AS row, table.* 
FROM table 
WHERE column2= ("Any String") 
ORDER BY row;

我希望你能帮我解决这个问题。

感谢

3 个答案:

答案 0 :(得分:5)

如果您尝试对该结果列使用名称row,则会遇到问题,因为它在Oracle中为Reserved Word。为列选择不同的名称,或用""引号括起来(quoted identifier

SELECT row_number() OVER(ORDER BY table.column1) AS "row", table.* 
FROM table 
WHERE column2= ("Any String") 
ORDER BY "row";

(我通常会选择选择其他名称)

答案 1 :(得分:0)

我不是专家,但也许你必须选择与他们合作的专栏,试试这样的syh:

SELECT name_column1, name_column2, ROW_NUMBER()
OVER( ORDER BY name_column1) AS THE_NAME_THAT_YOU_WANT
FROM NAME_OF_TABLE
WHERE name_column2 ="any_string";

看看错误的起源:

ORA-00923源于关键字FROM必须遵循SELECT语句中的最终选定项,或REVOKE语句中的特权。抛出ORA-00923时,这是因为SELECT或REVOKE语句在关键字FROM中存在以下有问题的语法之一:

  1. 丢失
  2. 拼错
  3. 错放
  4. 解析ORA-00923时有很多感兴趣的领域:

    您应该适当地更正语法,在必要时插入关键字FROM。     请记住,SELECT列表本身可能出错,这也可能导致ORA-00923出现。     在更正ORA-00923时也应评估引号,因为它们应该包含别名(如果在别名中使用)。     另外,请确定您是否使用保留字作为别名。

答案 2 :(得分:0)

是哪个DBMS? 你为什么不放弃括号并像这样使用:

SELECT row_number() OVER(ORDER BY table.column1) AS row, table.* 
FROM table 
WHERE column2 = 'Any String' 
ORDER BY row;