JDBC 驱动程序不支持 ROW_NUMBER 函数。从表中读取数据时如何获取从1到n的行id?
如果我有一个包含 2 列作为名字和姓氏的表,那么我会在 SQL Server 中运行类似“SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS rowid, * FROM tableName”的查询。这将为我提供从 1 到 n 的 rowid 以及结果集中的名字和姓氏的内容。
所以我会得到如下结果:
1, Felix, Cao
2, Jack, Chan
3, Nick, Ho
我想对 OpenEdge 数据库进行类似的查询,这样我就可以按照上面的顺序获取 rowid。
最佳答案
不,OpenEdge 数据库中没有与 ROW_NUMBER 等效的值。
关于ROWID:
抛开关于将 ROWID 视为整数是否是个好主意的讨论......(您应该重新阅读链接的 kbase)
无法保证任何特定的 ROWID 值将永远存在,并且 ROWID 没有理由以零或一或任何其他值开头。
如果您认为 ROWID 和 RECID 有点相同,并且 RECID 是由 block # 和该 block 内的位置组成的整数, ROWID 0 仍然永远不会存在,因为存储区域的第一部分是控制数据——那里不存储任何行。
您可以使用 ROWID 或 RECID 的猜测(或通过枚举每个可能的值)来成功扫描表,但您必须准备好处理间隙。例如,当尝试从损坏的数据库恢复数据时,这可能很有用。但这不是人们通常会做的事情。
我认为您已经确定 ROWID 是您遇到的问题的解决方案,但真正的问题不是“如何获取 ROWID 0”。如果我不得不猜测,我会猜测您可能正在尝试分批获取 N 个结果集。在这种情况下,您应该看看这个:How to mimic SELECT ... LIMIT, OFFSET in OpenEdge SQL?
关于java - 获取OpenEdge数据库中的rowid从1到n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40384848/