performance - Oracle PL/SQL 中的延迟更新

标签 performance oracle plsql oracle11g

我有一个简单的 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/

相关文章:

sql - oracle中使用sql或plsql进行条件删除

java - 什么时候应该将 Java 存储过程与 Oracle 数据库一起使用……有什么缺点?

sql - 如何同时修改表和 View 中一列的长度?

.net - linq to sql将这个查询翻译成: "select *"?格式是不是效率低下

python - 加速 cython 代码

mysql - 加快 MySQL 字符串 LIKE 查询

java - 为什么我们称java是一种编程语言,也是一种平台

database - 使用除 SQL Server 之外的排序规则冲突

sql - 将 PL/SQL ETL 过程转换为 HiveQL

performance - DynamoDB 中 UUID 的 "internal hash function"是什么?