java - 获取OpenEdge数据库中的rowid从1到n

标签 java openedge progress-db

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 等效的值。

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

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

相关文章:

linux - Progress 4gl (Openedge ABL) 是否能够读取 STDIN 并输出到 STDOUT?

syntax - TIME 减 4 小时的 Openedge 语法

java - 一域多战

Java 在不应该使用 Kerberos TicketCache 时自动使用它?

java - 调度一个java程序

java - AbstractTableModel继承设置列标题文本?

linux - 将 isql 用于与 Progress Openedge 数据库 10.2B 的 ODBC 连接时出现段错误

sql - 为 OpenEdge-SQL 选择列名

progress-4gl - OpenEdge 中的静态与动态查询

sql - 仅通过 where 子句,通过字符串字段将 SQL 查询限制为 10,000 个结果