4

我有一个正在执行 ETL 的 Progress 数据库。我正在读取的表之一没有唯一键,因此我需要访问 ROWID 才能唯一标识该行。访问正在进行的 ROWID 的语法是什么?

我知道使用 ROWID 进行行识别存在问题,但这就是我现在所拥有的。

4

4 回答 4

8

对我的回答有一个简短的警告-自从我与Progress合作以来已经将近 10 年了,所以我的知识可能已经过时了。

检查进度语言参考[PDF] 似乎显示了我记得的两个功能仍然存在:ROWIDRECID. 该ROWID功能较新,是首选。

在 Progress 4GL 中,你会像这样使用它:

FIND customer WHERE cust-num = 123.
crowid = ROWID(customer).

或者:

FIND customer WHERE ROWID(customer) = crowid EXCLUSIVE-LOCK.

检查Progress SQL Reference [PDF] 显示ROWID在 SQL 中也可以作为 Progress 扩展。你会像这样使用它:

SELECT ROWID, FirstName, LastName FROM customer WHERE cust-num = 123

编辑:根据 Stefan 的反馈进行编辑。

于 2008-09-19T08:12:16.943 回答
5

根据您的情况和应用程序的行为,这可能会或可能不重要,但您应该知道 ROWID 和 RECID 被重用并且它们可能会改变。

1)如果一条记录被删除,它的ROWID最终将被重用。

2) 如果表通过转储和加载或 tablemove 重新组织到新的存储区域,则 ROWID 将更改。

于 2009-06-22T12:13:00.210 回答
3

只是为戴夫韦伯的答案添加一点。我曾在 select 语句中尝试过 ROWID,但出现语法错误。ROWID 仅在您指定要选择的其余列时才有效,您不能使用 *.

这不起作用:

SELECT ROWID, * FROM customer WHERE cust-num = 123

这确实有效:

SELECT ROWID, FirstName, LastName FROM customer WHERE cust-num = 123
于 2008-09-19T15:31:28.920 回答
-2

一个快速的谷歌搜索出现了这个: http ://bytes.com/forum/thread174440.html

通过 greg@turnstep.com 阅读底部的消息(您需要 oid 或 ctid,具体取决于您想要重新持久性和唯一性的保证)

于 2008-09-18T22:16:23.787 回答