包中的一个过程。大致代码如下: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时,其他的操作的正常,但是游标没有返回提示信息,报如题的错误,高手们帮忙看看怎么回事呢?找了半天原因还是没解决。
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时,其他的操作的正常,但是游标没有返回提示信息,报如题的错误,高手们帮忙看看怎么回事呢?找了半天原因还是没解决。
--这个问题主要出现在使用数据库游标的时候.当执行存储过程,返回的游标没有打开时,可能会报这个错。
--游标没有打开的情况一般是忘记了写打开游标的语句,也可能是存储过程中执行出错,导致最后游标未打开。
--如:
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;
☆这个字符去掉也是一样的~
我是在包中动态的创建包,假如包名已经存在的话返回条件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;这个语句的话都是正常的,加上没有显示,不懂了~
大家继续帮我看看~
看看是不是你那些其他操作的问题