ROWNUM returns 作为 "invalid identifier"
ROWNUM returns as "invalid identifier"
我正在 运行针对 Oracle 数据库(不确定版本)进行非常基本的 select。
SELECT * FROM ACCOUNTING WHERE ID = 123456 ORDER BY DATE
我只想return最近的记录。所以我试过了...
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
我相信当您 select 包含 * 的逗号分隔列时,您需要为 table.
添加别名
SELECT A.ROWNUM, A.* FROM ACCOUNTING A WHERE ID = 123456 ORDER BY DATE
ROWNUM 在返回结果集后设置,是 Oracle 从 table(s) 中选择行的顺序,因此您可以通过执行以下操作将输出限制为 10 行:
...
FROM mytable
where ROWNUM < 11;
您不使用它来获取最新记录。它不是 table 中的一列,因此您收到了错误。
https://docs.oracle.com/cd/B28359_01/server.111/b28286/pseudocolumns009.htm#SQLRF00255
可以试试这个方法:
SELECT * FROM
(SELECT ROWNUM R, * FROM ACCOUNTING WHERE ID = 123456 ORDER BY DATE
) WHERE R < 2;
您的实际 查询可能在双引号内使用了 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:
ROWNUM
是一个伪列,它就像没有参数的函数。顺便说一下,"ROWNUM"
让 oracle 在你的 table 中搜索这样的列。
当是 Oracle 保留关键字时,引用的标识符将超出其原始用途,并且表现为用户定义的列。
不确定如何阻止查询生成器以这种方式解释。我认为这是一个 BUG.
我正在 运行针对 Oracle 数据库(不确定版本)进行非常基本的 select。
SELECT * FROM ACCOUNTING WHERE ID = 123456 ORDER BY DATE
我只想return最近的记录。所以我试过了...
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
我相信当您 select 包含 * 的逗号分隔列时,您需要为 table.
添加别名SELECT A.ROWNUM, A.* FROM ACCOUNTING A WHERE ID = 123456 ORDER BY DATE
ROWNUM 在返回结果集后设置,是 Oracle 从 table(s) 中选择行的顺序,因此您可以通过执行以下操作将输出限制为 10 行:
...
FROM mytable
where ROWNUM < 11;
您不使用它来获取最新记录。它不是 table 中的一列,因此您收到了错误。
https://docs.oracle.com/cd/B28359_01/server.111/b28286/pseudocolumns009.htm#SQLRF00255
可以试试这个方法:
SELECT * FROM
(SELECT ROWNUM R, * FROM ACCOUNTING WHERE ID = 123456 ORDER BY DATE
) WHERE R < 2;
您的实际 查询可能在双引号内使用了 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:
ROWNUM
是一个伪列,它就像没有参数的函数。顺便说一下,"ROWNUM"
让 oracle 在你的 table 中搜索这样的列。
当是 Oracle 保留关键字时,引用的标识符将超出其原始用途,并且表现为用户定义的列。
不确定如何阻止查询生成器以这种方式解释。我认为这是一个 BUG.