写了一个包,在执行时一执行就死掉,PL/SQL无响应,在当前用户下发现死锁,后来将包中的存储过程留下一个(其他都注释掉了),只执行非常简单的一个游标,还是不行,在Toad9.7下发生同样的事情,即使将oracle服务重启后在编译还是如此,找不到解决办法,各位高手多多帮忙,在线等,包代码如下:
包头:
create or replace package IMP_CTAIS_0215 AS
procedure p_main;
END IMP_CTAIS_0215;包体:
create or replace package body IMP_CTAIS_0215 is procedure p_main is
begin
p_imp_organ_stru;
commit;
end p_main;
--------------存储过程-------------
procedure p_imp_organ_stru is cursor cur_jg is
select *
from table_name
where yxbz = 'Y'
and xybz = 'Y'
and jg_id!='244000000'
order by jg_id; c_jg_count integer; -- 是否存在begin
for jg_rec in cur_jg loop select count(a.organ_id) -- 是否已经存在
into c_jg_count
from pub_organ a
where a.organ_id=jg_rec.jg_id;
if (c_jg_count=0) then
dbms_output.put_line('[p_imp_organ_stru]是否已经存在:'||jg_rec.jg_id||'~~count值'||c_jg_count);
end if;
end loop;
end p_imp_organ_stru ;
-------------------存储过程结束---------------------
end IMP_CTAIS_0215 ;
包头:
create or replace package IMP_CTAIS_0215 AS
procedure p_main;
END IMP_CTAIS_0215;包体:
create or replace package body IMP_CTAIS_0215 is procedure p_main is
begin
p_imp_organ_stru;
commit;
end p_main;
--------------存储过程-------------
procedure p_imp_organ_stru is cursor cur_jg is
select *
from table_name
where yxbz = 'Y'
and xybz = 'Y'
and jg_id!='244000000'
order by jg_id; c_jg_count integer; -- 是否存在begin
for jg_rec in cur_jg loop select count(a.organ_id) -- 是否已经存在
into c_jg_count
from pub_organ a
where a.organ_id=jg_rec.jg_id;
if (c_jg_count=0) then
dbms_output.put_line('[p_imp_organ_stru]是否已经存在:'||jg_rec.jg_id||'~~count值'||c_jg_count);
end if;
end loop;
end p_imp_organ_stru ;
-------------------存储过程结束---------------------
end IMP_CTAIS_0215 ;
解决方案 »
- 求大神解释oracle执行计划!
- 在oracle的存储过程中用事务如何实现.net中的try/catch语句?如何写啊?
- 求教问题·迷惑·非常迷惑的SQL性能问题
- 如何用sql显示一个指定时间段的日期队列
- 求数据表中字段的比较,请高手帮帮忙(急,在线等。。。)
- ora00257 archiver error 数据库登录不了
- 每周一凌晨0点执行,dbms_job.submit(:job1,'test;',sysdate,'sysdate+1/1440');怎么改?
- 一个简单的 pl/sql ,我看不懂什么意思
- 怎样用sql语句drop表里的一个字段?
- 100多万条数据不小心被删除了,还可以恢复吗?SOS!!!
- 求助,一个查询的问题
- 在oracle中如何求得系統給的行號嗎?
dbms_output.enable(999999999999);
如果是这个超长了肯定报错了,也不会出现不响应的情况吧。
继续等待……
以sys身份登录,查询SELECT DISTINCT '(' || s.sid || ') - ' || username AS "(session) - username"
FROM V$SESSION s, sys.x$kglob o, sys.x$kglpn p
WHERE upper(o.kglnaobj) LIKE upper('%不能编译的包体%')
AND p.kglpnhdl = o.kglhdadr
AND s.SADDR = p.kglpnuse;
找出这个sid,kill掉,应该就可以编译了。