ROWNUM返回为“无效标识符”

Gar*_*rom 3 sql oracle odac

我正在针对oracle数据库运行非常基本的选择(不确定版本)。

SELECT * FROM ACCOUNTING WHERE ID = 123456 ORDER BY DATE
Run Code Online (Sandbox Code Playgroud)

我只想返回最近的记录。所以我尝试了...

SELECT ROWNUM, * FROM ACCOUNTING WHERE ID = 123456 ORDER BY DATE
SELECT * FROM ACCOUNTING WHERE ID = 123456 AND ROWNUM < 2 ORDER BY DATE
Run Code Online (Sandbox Code Playgroud)

每次我得到相同的结果...

Error Source: System.Data.OracleClient    
Error Message: ORA-00904: "ROWNUM" : invalid identifier
Run Code Online (Sandbox Code Playgroud)

我所看到和阅读的所有内容都表明这应该可行。谁能看到我所缺少的吗?驾驶员可能会遇到问题吗?我正在使用以下软件包...(Oracle ODAC 11.20.30 x64)

更新

感谢您的所有答复。对于为简化方案而做出的任何困惑,我深表歉意。ODAC驱动程序实际上是在对查询进行分解并为我格式化查询,因此我最初发布的内容并不完全是正在运行的查询...这是驱动程序随口吐出的东西,它会生成错误...

SELECT "ROWNUM", ID, SITE_ID, READING_DATE, SUBMITTED_DATE, DEPOSIT_DATE
FROM    ACCOUNTING
WHERE   (SITE_ID = 33730)
ORDER BY READING_DATE
Run Code Online (Sandbox Code Playgroud)

而对于我的第二次尝试...

SELECT ID, SITE_ID, READING_DATE, SUBMITTED_DATE, DEPOSIT_DATE
FROM    ACCOUNTING
WHERE   (SITE_ID = 33730) AND ("ROWNUM" < 2)
ORDER BY READING_DATE
Run Code Online (Sandbox Code Playgroud)

Mah*_*kar 5

您的实际查询可能ROWNUM在双引号内使用。否则,此错误是不可能的。

虽然您的第一个查询是 ORA-00936: missing expression

select * from dual WHERE "ROWNUM" < =3;

Error report -
SQL Error: ORA-00904: "ROWNUM": invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
Run Code Online (Sandbox Code Playgroud)

ROWNUM是一个伪列,就像没有参数的函数..顺便说一下"ROWNUM",oracle使您可以在表中搜索这样的列。

带引号的标识符when是Oracle保留的关键字,将超出其原始用途,并且表现为用户定义的列。

不确定如何停止“查询”构建器以这种方式进行解释。我认为这是一个错误