oracle 执行存储过程 无法中断 但是是循环执行 怎么办
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 执行存储过程 无法中断 但是是循环执行 怎么办相关的知识,希望对你有一定的参考价值。
大致就是通过游标,将一个试图的所有记录,插入到另一个表中的存储过程,分布式的(试图和表不在一个服务器上),但是在两个pc机上测试可以完成工作,存储过程一放到服务器上,就一直在执行当中,cpu和会话都没有反应,中断也中断不成.这是什么问题啊,求大哥大姐指点下
游标的的退出条件也写了,就是当游标无记录时退出,
EXCEPTION, WHEN OTHERS THEN EXIT;写了 错误的消息及错误代码都提取出来了.
一点执行就一直停不下来,也不是每次都这样.就是执行3-4次出现一次无限执行
每个循环结束记得fetch下一跳数据,不然就会无限循环。
你的功能是插入数据,在做INSERT这段,用BEGIN END单独做成一个BLOCK吧,
写个EXCEPTION, WHEN OTHERS THEN EXIT;
我觉得基本就这几点会出现问题吧,你再看看吧。 参考技术A 有点儿像是无法取得到锁,你试试在你的更新/插入语句中加入 nowait 关键字试试看。
根据执行的错误信息再进一步分析。 参考技术B 你可以先看看表中有数据了吗,没有数据就是你程序有问题,或者可能是你的程序没法访问你那个服务器了。。
oracle存储过程中update语句一直在执行中,无法更新完成
入参in_yf是月份,格式如:“201501”,在log_insert表中month字段类型是varchar2(6),这个表很小(五行数据),但是执行这个过程,10分钟后还在执行,也不报错。不知道哪里出问题了,求教!
可能这个表被别的用户锁了;select sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode
from v$locked_object lo, dba_objects ao, v$session sess
where ao.object_id = lo.object_id
and lo.session_id = sess.sid;
--杀掉会话
alter system kill session \'sid,serial#\'; 参考技术A 尝试更改sql脚本如下所示:
create or replace procedure test_wz(in_yf in varchar2)
is
v_yf varchar(50);
begin
v_yf:=in_yf;
update log_insert -- 不要用别名
set zfsjdc_date=sysdate
where month=v_yf and unusual_flag='0';
-- 去掉commit;因为你不是在Oracle SQL PLUS环境下执行。
end test_wz; 参考技术B 表锁了,应该是有别的程序操作了这条记录,没有提交事物。本回答被提问者采纳
以上是关于oracle 执行存储过程 无法中断 但是是循环执行 怎么办的主要内容,如果未能解决你的问题,请参考以下文章