我有一个Progress数据库,我正在执行ETL。我正在读取的其中一个表没有唯一的密钥,因此我需要访问ROWID以便能够唯一地标识该行。访问正在进行的ROWID的语法是什么?
我知道使用ROWID进行行识别存在问题,但这就是我现在所拥有的。
答案 0 :(得分:8)
我的回答快速警告 - 我与Progress合作已近10年,所以我的知识可能已经过时了。
检查Progress Language Reference [PDF]似乎表明我记得的两个功能仍然存在:ROWID
和RECID
。 ROWID
功能较新,是首选。
In 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中也可用作进度扩展。你会这样使用它:
SELECT ROWID, FirstName, LastName FROM customer WHERE cust-num = 123
编辑:按照Stefan的反馈编辑。
答案 1 :(得分:5)
根据您的情况和应用程序的行为,这可能或不重要,但您应该知道ROWID& RECID被重复使用,并且可能会发生变化。
1)如果删除了一条记录,它的ROWID最终将被重用。
2)如果通过转储&重组表格。加载或将tablemove移动到新的存储区域,然后ROWID将发生变化。
答案 2 :(得分:2)
只是为Dave Webb的答案添加一点。我在select语句中尝试过ROWID,但是语法错误。 ROWID仅在您指定要选择的其余列时才有效,您不能使用*。
这不起作用:
SELECT ROWID, * FROM customer WHERE cust-num = 123
这确实有效:
SELECT ROWID, FirstName, LastName FROM customer WHERE cust-num = 123
答案 3 :(得分:-1)
快速谷歌搜索出现了这个: http://bytes.com/forum/thread174440.html
通过greg@turnstep.com向底部阅读消息(你要么想要oid或ctid,要么取决于你想要的持久性和唯一性的保证)