如何从Progress数据库中获取ROWID

时间:2008-09-18 22:04:30

标签: database progress-4gl progress-db

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

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

4 个答案:

答案 0 :(得分:8)

我的回答快速警告 - 我与Progress合作已近10年,所以我的知识可能已经过时了。

检查Progress Language Reference [PDF]似乎表明我记得的两个功能仍然存在:ROWIDRECIDROWID功能较新,是首选。

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,要么取决于你想要的持久性和唯一性的保证)