我有一个简单的 PL/SQL 过程,有一个游标,我对它进行迭代。在每次迭代中,我都会创建一个 UPDATE 语句(在对数据执行一些业务逻辑之后)。
但是,如果有很多迭代(数万次),这会变得非常慢,因为在每次迭代中都有一个 UPDATE 语句。
有没有办法以某种方式“延迟”这些更新,以便它们一次全部执行(从而更快)。
编辑:甲骨文 11
最佳答案
如果您不知道如何使用直接 SQL(同时避免 for 循环),那么您可能可以使用 pl/sql 的 BULK Collection 功能来提高性能。
Example article here.
语法摘录
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;
关于performance - Oracle PL/SQL 中的延迟更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8945144/