2014-02-06 69 views
1

進行更新我有要求在對pl/sql進行排序後更新數據集。這是動態SQL。Oracle如何使用ORDER BY

v_dyn_sql:= 'UPDATE '||v_in_schema||'.'||v_in_skinny_table||' 
        SET BATCH=CEIL(ROWNUM/'||v_in_source_batch_size||') 
        WHERE 
         RECORD_STATUS IN '||v_in_mode||' 
        AND 
         LEGACY_SYSTEM_ID__C in (SELECT LEGACY_SYSTEM_ID__C 
              FROM '||v_in_schema||'.'||v_in_wide_table||' 
              ORDER BY '||v_in_sort_criteria) 

*** ID不是唯一的,所以MERGE聲明不適用於我。

所以這應該對數據集進行排序,然後用1更新第一個v_in_source_batch_size行,第二個v_in_source_batch_size行等等。

我該如何達到這個結果?唯一的方法是使用遊標嗎?如果是這樣,我怎樣才能使光標動態?

+0

你可以遍歷這是一個遊標在PLSQL中,並一次發佈一個更新。 – Randy

+0

如何爲這種情況動態創建遊標? – user3224907

回答

2
begin 
    for i in (select * from <table> 
      order by col1) loop 
    update <table> set <col>=<col_value> where <col>=i.<col_pk>; 
    end loop; 
end; 

嘗試這樣的事情 - 你可以使用其中的當前訪問當前行中的光標,並與更新的where子句部分免除,如果你喜歡

+0

應該指出'select * from

'子句將需要應用'ORDER BY',以滿足要求。 – vapcguy