我有兩個選項可以根據選擇查詢的遊標更新表。Oracle Bulk從光標或用戶處收集和更新使用Select子查詢進行更新
說我有這個選擇查詢:
select id1 from table1
和我的更新查詢:
update table2 set value=1 where table2.id2 = table1.id1
現在的2個選項是:
設置光標選擇查詢並批量獲取它,然後在for all語句中激發更新查詢。與選擇的子查詢作爲
寫入更新查詢:
更新表2的設定值= 1,其中在table2.id2(選擇從表1 ID1)
哪一個更好?
Oracle在內部是否將select子查詢轉換爲批量收集,還是將其視爲普通光標?
「首先問你的問題」Oracle是否將select子查詢內部轉換爲批量收集?「否」。說實話這是不正確的。嘗試FOR rec IN select使用dbms_profiler,你會看到有隱含的5行左右的散列:) –
@AlexanderTokarev:我不明白你的觀點。 'FOR rec IN select'顯然是FOR循環的批量收集。問題是'update table2 set value = 1 where table2.id2 in(select 1 from table1)'並且沒有涉及批量收集。 PL/SQL'FOR .. LOOP'不是子查詢。 – GWu
我明白你的觀點。稍微困惑:)錯過了SUBQUERY字:) –