我正在针对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)
您的实际查询可能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保留的关键字,将超出其原始用途,并且表现为用户定义的列。
不确定如何停止“查询”构建器以这种方式进行解释。我认为这是一个错误。