Oracle PLSQL 在每批完成后打印批量批输出

如何解决Oracle PLSQL 在每批完成后打印批量批输出

我有以下 plsql 批量脚本,可在整个更新完成后打印每个批次大小和批次完成时间的输出

set timing on echo on verify on Feedback on
set serveroutput on
whenever sqlerror exit failure rollback

declare 
    type update_id is table of tbl_source%rowtype;
    tab      update_id := update_id();
    start_time   number;
    end_time     number;
    c_limit      int;  -- bulk collect limit
    cursor load_cur is
    select * from tbl_source;

begin
    open load_cur;
    start_time := dbms_utility.get_time;
    loop
        fetch load_cur
             bulk collect into tab limit &c_limit;
        begin
            forall i in tab.first..tab.last
                
                update tbl_target
                   set value = tab(i).name
                 where id = tab(i).id
                ;

                dbms_output.put_line('Bulk    (' || tab.count || ' rows): ' || (dbms_utility.get_time - start_time)/100 || 'seconds');

            exception
            when others then
                dbms_output.put_line('Updated '|| sql%rowcount                                     || ' rows.');
                dbms_output.put_line(sqlerrm);
            commit;

        end;

        exit when load_cur%notfound;
    end loop;

    end_time := dbms_utility.get_time;
    dbms_output.put_line('Bulk Update Time taken: ' || (end_time - start_time)/100 || 'seconds');
    close load_cur;
end;
Bulk    (50000 rows): 112.87seconds
Bulk    (50000 rows): 186.74seconds
Bulk    (50000 rows): 255.5seconds
Bulk    (50000 rows): 326.01seconds
Bulk    (50000 rows): 428.44seconds
Bulk    (50000 rows): 503.91seconds
Bulk    (50000 rows): 570.92seconds
Bulk    (50000 rows): 636.56seconds
Bulk    (50000 rows): 686.8seconds
Bulk    (50000 rows): 748.89seconds
Bulk    (50000 rows): 811.76seconds
Bulk    (50000 rows): 865.96seconds
Bulk    (50000 rows): 915.68seconds
Bulk    (50000 rows): 964.28seconds
Bulk    (50000 rows): 1018.27seconds
Bulk    (50000 rows): 1098.99seconds
Bulk    (8359 rows): 1110.22seconds
Bulk Update Time taken: 1110.22seconds


PL/sql procedure successfully completed.

Elapsed: 00:18:30.822

但是我需要在第一批完成后立即打印批次大小和完成时间,以此类推以用于下一批。所以我会知道有多少批次已经完成,有多少批次待处理。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?