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

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

有帮助吗?

解决方案

对我的回答有一个简短的警告——自从我与他们合作以来已经快十年了 进步 所以我的知识可能有点过时了。

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

在 Progress 4GL 中,您可以像这样使用它:

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

或者:

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

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

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

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

其他提示

根据您的情况和应用程序的行为,这可能重要也可能无关紧要,但您应该意识到 ROWID 和 RECID 会被重用并且它们可能会发生变化。

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

2) 如果通过转储和加载或将表移动到新的存储区域来重新组织表,则 ROWID 将发生变化。

只是为戴夫·韦伯的答案添加一点内容。我在 select 语句中尝试了 ROWID,但出现语法错误。ROWID 仅在指定要选择的其余列时才起作用,不能使用 *。

这不起作用:

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

这确实有效:

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top