在Progress OpenEdge数据库中从1到n获取rowid

时间:2016-11-02 16:20:58

标签: java openedge progress-db

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。

1 个答案:

答案 0 :(得分:3)

不,OpenEdge数据库中没有等效的ROW_NUMBER。

http://knowledgebase.progress.com/articles/Article/Is-ORACLE-row-number-function-supported-in-OpenEdge

关于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?