row_number() FROM 关键字未在预期位置找到

问题描述 投票:0回答:3

我有一个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;

我希望你能帮我解决这个代码。

sql select
3个回答
6
投票

如果您尝试为该结果列使用名称

row
,则会遇到问题,因为它是 Oracle 中的保留字。为该列选择一个不同的名称,或者用
""
引号将其括起来(带引号的标识符:

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

(不过,我通常会选择选择不同的名称)


0
投票

那是哪个 DBMS? 为什么不去掉括号并像这样使用:

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

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 源于 SELECT 语句中最终选定项或 REVOKE 语句中的权限后面需要关键字 FROM。当抛出 ORA-00923 时,这是因为 SELECT 或 REVOKE 语句在关键字 FROM 中具有以下有问题的语法之一:

  1. 失踪了
  2. 拼写错误
  3. 放错地方了

解决 ORA-00923 时有很多值得关注的领域:

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

© www.soinside.com 2019 - 2024. All rights reserved.