2008-09-18 109 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將會改變。