如何从Progress数据库获取ROWID
我有一个Progress数据库,我正在执行ETL。我正在阅读的其中一个表格没有唯一的关键字,所以我需要访问ROWID才能够唯一标识该行。访问正在进行中的ROWID的语法是什么?如何从Progress数据库获取ROWID
我知道使用ROWID进行行标识存在问题,但这是我现在所拥有的。
我的回答很快就提醒 - 这是我与Progress合作的近10年,所以我的知识可能已经不止一点点过时了。
检查Progress Language Reference [PDF]似乎显示我记得的两个功能仍然存在:ROWID
和RECID
。 ROWID
功能更新,是首选。
正在进行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的反馈。
一个快速谷歌搜索变成了这样: http://bytes.com/forum/thread174440.html
通过[email protected]阅读对底部的消息(你要么需要OID或CTID取决于你想要重新持久性和独特性是什么保证)
只为Dave Webb的答案添加一点点。我在select语句中尝试过ROWID,但却被给出了语法错误。如果您指定要选择的其余列,则ROWID仅适用,您不能使用*。
这不起作用:
SELECT ROWID, * FROM customer WHERE cust-num = 123
这并不工作:
SELECT ROWID, FirstName, LastName FROM customer WHERE cust-num = 123
根据您的情况和应用程序的行为,这可能会或可能无所谓,但你应该知道的ROWID & RECID被重复使用,并且可能会更改。
1)如果记录被删除,它的ROWID将最终被重用。
2)如果表通过转储&加载或移动到新的存储区域重新组织,那么ROWID将会改变。
我有一个Progress数据库,而不是PostgreSQL数据库。 – 2008-09-18 22:21:22
D'oh!对不起,完全误读了。 – SquareCog 2008-09-18 22:26:15
常见的错误,没有多少人甚至听说过进展:-) – 2008-09-18 22:30:01