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)