如何显示存储过程执行进度

CN001 2009-02-12 11:39:08
校验1万行的一个数据表,希望每校验100行就输出一下进度。
if mod(v_count,100) = 0 then
commit;
DBMS_OUTPUT.put_line(v_count);
end if;
用这个语句的结果是存储过程执行完一下子输出所产生的所有结果。
并不是每100条一输出。
不知道如何解决,求助。
...全文
539 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ypopo1234 2009-02-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lpc19598188 的回复:]
这个问题让人头疼,我也问过,可以看:
http://topic.csdn.net/u/20081030/13/fe96635c-fa7c-42e5-8bc1-f60bd68a8b44.html

最后我使用的办法是执行中途用utl_file写日志,
自治事务整复杂了,不好用
[/Quote]

爱死你了,要是你是个女地
flg_inwind 2009-02-16
  • 打赏
  • 举报
回复
存入设计好的数据库表或者写日志。
ruby林 2009-02-16
  • 打赏
  • 举报
回复
这个问题也太复杂了,没想过,也没遇到过.比较困难!
zcs_1 2009-02-12
  • 打赏
  • 举报
回复
可以创建一个进度表,利用此表中的一个字段值来确定当前执行的记录数,如
create table process(total number, curr number);
其中的total是总行数,curr是当前执行到的行数.

下面是更新当前进度的子程序,由于是自治事务,所以不会影响调用程序的事务.

create or replace procedure get_process(p_count in number)
as
PRAGMA AUTONOMOUS_TRANSACTION;
begin
update process set curr = p_count;
commit;
end;
/


下面开始调用get_process
begin
insert into process(total) values(10000);
for i in 1..10000 loop
if mod(i,100) = 0 then
commit;
get_process(i);
end if;
end loop;
end;
/
gmmmfly 2009-02-12
  • 打赏
  • 举报
回复
同楼主问,有高手详细说明一下不?
AFIC 2009-02-12
  • 打赏
  • 举报
回复
set serveroutput on
又是违规昵称 2009-02-12
  • 打赏
  • 举报
回复
这个问题让人头疼,我也问过,可以看:
http://topic.csdn.net/u/20081030/13/fe96635c-fa7c-42e5-8bc1-f60bd68a8b44.html

最后我使用的办法是执行中途用utl_file写日志,
自治事务整复杂了,不好用

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧