【问题标题】:Oracle how to update using ORDER BYOracle 如何使用 ORDER BY 进行更新
【发布时间】:2014-02-06 22:43:54
【问题描述】:

我需要在排序后更新数据集,在 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 语句对我不起作用。

所以这应该对数据集进行排序,然后将第一行 v_in_source_batch_size 更新为 1,第二个 v_in_source_batch_size 行更新为 2,依此类推。

我怎样才能达到这个结果?使用游标是唯一的方法吗?如果是这样,我怎样才能使光标动态?

【问题讨论】:

  • 您可以将其作为 PLSQL 中的游标循环并一次发出一个更新。
  • 如何为这种情况动态创建游标?

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


【解决方案1】:
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 current of 访问游标中的当前行,如果您愿意,可以省去更新的 where 子句部分

【讨论】:

  • 应该表明select * from &lt;table&gt;子句需要ORDER BY才能满足要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
相关资源
最近更新 更多