java未执行语句句柄_ORA-24338:未执行语句句柄

今天在调试oracle的时候,测试存储过程时,存储过程只要执行到下面部分时程序oracle总是报ORA-24338:未执行语句句柄错误

TEMP_sSqlText:= 'with TMP_BL2_MZBRXXGET as (select row_number() over(order by a.ID) as rownum1'

|| ' , A.ID,A.BRID,A.MZH,A.DJH,A.XM,A.XB,A.CSRQ,A.SFZH,A.JZDZ,A.KBH,A.KSDM,A.WSSDM,A.YSDM,A.YSMC,A.FZBZ,b.ZDDM1 AS ZDDM,b.ZDMC1 AS ZDMC from HISORCL.mz_ghxx a,mz_bszd b where a.wssdm=b.wssdm and a.id=b.zb_id'

||TEMP_sSql

||') select * from TMP_BL2_MZBRXXGET;'

open CUR_RESULT for(TEMP_sSqlText);

分步执行存储过程,将变量放到sql语句中测试却没有错误,后来经过各种调试终于找到错误,原来在拼接存储过程的时候,在最后多写了一个分号,这种错误真心不好找,后来在网上有搜索了一下,发现下面的情况也有可能出现ORA-24338:未执行语句句柄错误

这个问题主要出现在使用数据库游标的时候.当执行存储过程,返回的游标没有打开时,可能会报这个错。

游标没有打开的情况一般是忘记了写打开游标的语句,也可能是存储过程中执行出错,导致最后游标未打开。

如:

CREATE OR REPLACE package BODY PK_PROFU_GetMtStopTimesInfo

is procedure GetMtStopTimesInfo

(

mMtName varchar2,

mycs out mytype

)

as

v_count int:=0;

begin

select count(1) INTO v_count

FROM WPStopTimesInfo t,MachineTools s

WHERE  s.matolname=mMtName  AND t.mtid=s.matolid;

if(v_count>0) then

open mycs for  select w.matolname , v.stoptimes

FROM WPStopTimesInfo v,MachineTools w

WHERE  w.matolname=mMtName  AND v.mtid=w.matolid

order by v.stoptimes desc ;

end if;

END;

end;

当上面的变量 v_count=0 时,将出现上述错误.

将其修改成如下所示,问题解决.

CREATE OR REPLACE package BODY PK_PROFU_GetMtStopTimesInfo

is procedure GetMtStopTimesInfo

(

mMtName varchar2,

mycs out mytype

)

as

v_count int:=0;

begin

select count(1) INTO v_count

FROM WPStopTimesInfo t,MachineTools s

WHERE  s.matolname=mMtName  AND t.mtid=s.matolid;

if(v_count>0) then

open mycs for  select w.matolname , v.stoptimes

FROM WPStopTimesInfo v,MachineTools w

WHERE  w.matolname=mMtName  AND v.mtid=w.matolid

order by v.stoptimes desc ;

else

open mycs for select mMtName as matolname,1 as stoptimes  from dual;

end if;

END;

end;

也就是说当游标没有打开的时候就会报此错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值