Oracle PL/SQL中的延迟更新

Ond*_*cka 4 oracle performance plsql oracle11g

我有一个简单的PL/SQL过程,有一个游标,我迭代它.在每次迭代中,我都会创建一个UPDATE语句(在对数据执行某些业务逻辑之后).

但是,如果有很多迭代(数万个),这可能会变得非常慢,因为在每次迭代中都有单个UPDATE语句.

有没有办法以某种方式"延迟"这些更新,以便它们一次性执行(因此更快).

编辑:Oracle 11

Bri*_*ian 11

如果您无法弄清楚如何使用直接SQL(一起避免for循环),那么您可能会使用pl/sql的BULK Collection功能来提高性能.

这里的示例文章.

语法摘录

 LOOP
    FETCH c_orders
    BULK COLLECT INTO v_order_ids, v_currency_codes, v_amounts_local
    LIMIT 100;
    EXIT WHEN v_row_count = c_orders%ROWCOUNT;
    v_row_count := c_orders%ROWCOUNT;
    FOR i IN 1..v_order_ids.count LOOP
      v_amounts_usd(i) := currency_convert (v_amounts_local(i),
                                            v_currency_codes(i));
    END LOOP;
    FORALL i IN 1..v_order_ids.count
      UPDATE open_orders /* bulk bind */
      SET    amount_usd = v_amounts_usd(i)
      WHERE  order_id = v_order_ids(i);
  END LOOP;
Run Code Online (Sandbox Code Playgroud)