我有一个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;
我希望你能帮我解决这个问题。
感谢
答案 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中存在以下有问题的语法之一:
解析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;