2008-09-18 113 views
3

我有一个Progress数据库,我正在执行ETL。我正在阅读的其中一个表格没有唯一的关键字,所以我需要访问ROWID才能够唯一标识该行。访问正在进行中的ROWID的语法是什么?如何从Progress数据库获取ROWID

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

回答

8

我的回答很快就提醒 - 这是我与Progress合作的近10年,所以我的知识可能已经不止一点点过时了。

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

正在进行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

一个快速谷歌搜索变成了这样: http://bytes.com/forum/thread174440.html

通过[email protected]阅读对底部的消息(你要么需要OID或CTID取决于你想要重新持久性和独特性是什么保证)

+0

我有一个Progress数据库,而不是PostgreSQL数据库。 – 2008-09-18 22:21:22

+0

D'oh!对不起,完全误读了。 – SquareCog 2008-09-18 22:26:15

+1

常见的错误,没有多少人甚至听说过进展:-) – 2008-09-18 22:30:01

2

只为Dave Webb的答案添加一点点。我在select语句中尝试过ROWID,但却被给出了语法错误。如果您指定要选择的其余列,则ROWID仅适用,您不能使用*。

这不起作用:

SELECT ROWID, * FROM customer WHERE cust-num = 123 

这并不工作:

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

根据您的情况和应用程序的行为,这可能会或可能无所谓,但你应该知道的ROWID & RECID被重复使用,并且可能会更改。

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

2)如果表通过转储&加载或移动到新的存储区域重新组织,那么ROWID将会改变。