如何解决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 举报,一经查实,本站将立刻删除。