【发布时间】:2015-06-10 13:55:05
【问题描述】:
我正在对一个 oracle 数据库运行一个非常基本的选择(不确定版本)。
SELECT * FROM ACCOUNTING WHERE ID = 123456 ORDER BY DATE
我只想返回最近的记录。所以我试过了……
SELECT ROWNUM, * FROM ACCOUNTING WHERE ID = 123456 ORDER BY DATE
SELECT * FROM ACCOUNTING WHERE ID = 123456 AND ROWNUM < 2 ORDER BY DATE
我每次都得到相同的结果...
Error Source: System.Data.OracleClient
Error Message: ORA-00904: "ROWNUM" : invalid identifier
我看到和读到的一切都表明这应该有效。谁能看到我错过了什么?这可能是驱动程序的问题吗?我正在使用以下软件包...(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
对于我的第二次尝试......
SELECT ID, SITE_ID, READING_DATE, SUBMITTED_DATE, DEPOSIT_DATE
FROM ACCOUNTING
WHERE (SITE_ID = 33730) AND ("ROWNUM" < 2)
ORDER BY READING_DATE
【问题讨论】:
-
你确定你从这些确切的查询中得到了那个错误吗?第一个应该得到 ORA-00936 因为你没有使用别名;第二个应该没问题(用您的实际列名替换保留字'DATE'),但如果没有子查询,它无论如何都不会完全符合您的要求。
-
那么您是在双引号中引用 ROWNUM,还是自动为您执行此操作?如果是这样,你能说出它在做什么吗?
-
我相信 ODAC 正在为我做这件事。我相信这应该将其与字段名称或值区分开来......以便将其识别为特殊命令。
-
也许展示您如何创建和执行查询将有助于确定解决方案 - 也许是一个演示问题的简单程序?或者至少从您的原始查询到您可以看到已添加引号的位置,尽管连接设置中可能存在相关内容。我不使用 ODAC,但希望有人知道发生了什么——祝你好运。