我有一個Progress數據庫,我正在執行ETL。我正在閱讀的其中一個表格沒有唯一的關鍵字,所以我需要訪問ROWID才能夠唯一標識該行。訪問正在進行中的ROWID的語法是什麼?如何從Progress數據庫獲取ROWID
我知道使用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