Oracle如何使用ORDER BY进行更新

时间:2014-02-06 22:43:55

标签: oracle sorting oracle11g sql-update sql-order-by

我需要在pl / sql中对数据集进行排序后更新数据集。这是动态SQL。

    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行,依此类推。

我怎样才能达到这个效果?是否只使用游标?如果是这样,我如何使光标动态化?

1 个答案:

答案 0 :(得分: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子句部分