求助!!!关于ORA-24338:未执行语句句柄

贝鱼 2011-04-01 07:37:44
包中的一个过程。大致代码如下:

create or replace package body pa_name is

procedure sp_name(c out cur) /*这边的cur 在包头中已经定义*/
as
begin
if 条件1 then
open c for select 'ERROR:包名称已存在,请确认!!!' FROM DUAL;
else
...
...
...(一些操作)

OPEN C FOR SELECT '☆包已经成功创建☆' 提示信息 FROM DUAL;
end if;
end;
end pa_name ;
符合条件1时,返回的提示信息正常,符合条件2时,其他的操作的正常,但是游标没有返回提示信息,报如题的错误,高手们帮忙看看怎么回事呢?找了半天原因还是没解决。
...全文
769 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
贝鱼 2011-04-02
  • 打赏
  • 举报
回复
嗯,O(∩_∩)O谢谢大家指点
☆这个字符去掉也是一样的~
我是在包中动态的创建包,假如包名已经存在的话返回条件1的提示,不存在的话执行条件2下面的动态SQL语句,然后再返回个成功创建的提示。

select count(1) into v_num from user_soource where type='PACKAGE' AND NAME=UPPER('xx');
if count(1)>0 then
open c for select 'ERROR:包名称已存在,请确认!!!' FROM DUAL;
else
...
动态语句...
OPEN C FOR SELECT '包已经成功创建' 提示信息 FROM DUAL;
end if;
end;...


没有OPEN C FOR SELECT '包已经成功创建' 提示信息 FROM DUAL;这个语句的话都是正常的,加上没有显示,不懂了~
大家继续帮我看看~

304的的哥 2011-04-02
  • 打赏
  • 举报
回复
看看别人是怎么解决的!

--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;
Rotel-刘志东 2011-04-02
  • 打赏
  • 举报
回复
不是字符的问题,是数据类型问题。
loveofmylife 2011-04-02
  • 打赏
  • 举报
回复
你吧其他操作先去掉,就只剩下那条open for语句试试
看看是不是你那些其他操作的问题
minitoy 2011-04-02
  • 打赏
  • 举报
回复
ee。有必要用cursor做返回么,直接返回varchar2不就可以了?
gelyon 2011-04-01
  • 打赏
  • 举报
回复
会不会是特殊字符☆的原因?

17,377

社区成员

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

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