我有一个Progress数据库,正在进行ETL。 我要读取的其中一张表没有唯一键,因此我需要访问ROWID来唯一标识行。 在Progress中访问ROWID的语法是什么?
我知道使用ROWID进行行标识存在问题,但这是我现在拥有的唯一标识。
我有一个Progress数据库,正在进行ETL。 我要读取的其中一张表没有唯一键,因此我需要访问ROWID来唯一标识行。 在Progress中访问ROWID的语法是什么?
我知道使用ROWID进行行标识存在问题,但这是我现在拥有的唯一标识。
我在回答中需要说明一件事情——距离我上次使用Progress已经接近10年了,所以我的知识可能已经过时了。
查看Progress语言参考[PDF]似乎显示我记得的两个函数仍然存在:ROWID
和RECID
。其中ROWID
函数是较新的,更受推荐。
在Progress 4GL中,您可以像这样使用它:
FIND customer WHERE cust-num = 123.
crowid = ROWID(customer).
或者:
FIND customer WHERE ROWID(customer) = crowid EXCLUSIVE-LOCK.
ROWID
也是Progress扩展中SQL中可用的。像这样使用它:SELECT ROWID, FirstName, LastName FROM customer WHERE cust-num = 123
编辑:根据Stefan的反馈进行了编辑。
根据您的情况和应用程序的行为,这可能很重要,也可能不重要,但您应该知道ROWIDs和RECIDs会被重复使用并且可能会发生变化。
1)如果记录被删除,它的ROWID最终将被重复使用。
2)如果表通过转储和加载或表移动到新存储区域进行重新组织,则ROWIDs将更改。
SELECT ROWID, * FROM customer WHERE cust-num = 123
这是有效的:
SELECT ROWID, FirstName, LastName FROM customer WHERE cust-num = 123
SELECT RowID, "cust-num".* FROM ...
将起作用。 - David J