繁体   English   中英

如何从Progress数据库中获取ROWID

[英]How to get the ROWID from a Progress database

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

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

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

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

在进步4GL你会使用这样的东西:

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

要么:

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

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

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

编辑:按照Stefan的反馈编辑。

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

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

2)如果通过dump&load或tablemove将表重新组织到新的存储区域,那么ROWID将会改变。

只是为Dave Webb的答案添加一点。 我在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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM