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 执行存储过程 无法中断 但是是循环执行 怎么办的主要内容,如果未能解决你的问题,请参考以下文章

调用存储过程的Oracle游标循环

oracle存储过程中update语句一直在执行中,无法更新完成

oracle存储过程循环插数据

oracle存储过程中循环for in是如何使用的

oracle存储过程中循环for in是如何使用的

sqlserver过程中使用openquery 修改oracle数据时,存储过程中断,oracle的值被改为null