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