2016-04-25 53 views
2

爲什麼Oracle在使用「rowid」時爲什麼使用「where current」語法?示例:PL/SQL「Where of Current of」vs「ROWID」

BEGIN 
    FOR rec IN (SELECT t.column1, t.rowid rid FROM test_table) LOOP 
    UPDATE test_table tb SET column1 = some_function(rec.column1) WHERE tb.rowid = rec.rid; 
    END LOOP; 
    COMMIT; 
END; 

DECLARE 
    CURSOR cur IS SELECT t.column1 FROM test_table; 
    param1 test_table.column1%TYPE; 
BEGIN 
    LOOP 
    FETCH cur INTO param1; 
    UPDATE test_table tb SET tb.column1 = some_function(param1) WHERE CURRENT OF cur; 
    EXIT WHEN cur%NOTFOUND; 
    END LOOP; 
    COMMIT; 
END; 
+0

Oracle提供了WHERE CURRENT OF子句來更新或刪除由會話中的FOR UPDATE OF遊標鎖定的行。 –

回答

0

Where Current Of用於標識遊標中的最後獲取行。這是更安全的,因爲你有100%的信心,即f.e.你從curosr更新最後取得的行。使用Rowids會有危險,因爲搞砸事情真的很容易。

+0

你可以說成本? – PolyMorph

+0

最後獲得的行 - 所以成本SUPPOSED是1(不想給壞英特爾:)) ROWID - 我解釋libarary的例子。如果你想找到一本沒有ROWID(地址)的書,你可以閱讀所有從第一章開始的書,直到你找到你想要的東西。 WITH rowid你有信息,去哪裏,哪條衚衕,哪個架子和哪個位置,所以你只是跳過所有的搜索並去尋址。在這種情況下,它也支持成本1.但它很大程度上取決於您的代碼。 –