我创建了一个返回结果集的存储过程,编译可以通过。但程序执行时出现如下错误:
System.Data.OracleClient.OracleException: ORA-24338: 未执行语句句柄
我在网上找了一些资料,说游标没有打开,或语句执行过程中出错导致游标没有打开。
我有些不明白。我明明open了呀,还有,如果编译通过的话,语句执行会出错吗?最多也就是没有返记录吧,为什么会出异常呢?
下面是我的存储过程创建包:
CREATE OR REPLACE PACKAGE TAIXIS as
TYPE myrctype IS REF CURSOR;
procedure list_getTaixis(result out myrctype);
end Taixis;
包体:
CREATE OR REPLACE PACKAGE BODY TAIXIS as
procedure list_getTaixis(result out myrctype)
is
begin
declare
aTime date;
Race_ID int;
Race_Name varchar(200);
bTime date;
Paper_ID int;
Paper_Name varchar(200);
begin
select c.Paper_ID, c.BTime,c.Paper_Name into Paper_ID ,bTime,Paper_Name from
(select a.Paper_ID,a.BTime,a.Paper_Name,b.Grade_ID from PAPER_INFO a , USER_GRADE b where a.Paper_ID=b.Paper_ID and a.Show_Grade=1 and a.Paper_Type=1 and rownum=1 and b.Grade_Mode=1) c
order by c.BTime Desc;
select c.Race_ID,c.BTime,c.Race_Name into Race_ID,aTime,Race_Name from (Select a.Race_ID,a.BTime,a.Race_Name,b.Grade_ID from RACE_IN_INFO a ,USER_RACE_GRADE b where a.Race_ID=b.Race_ID and a.Show_Grade=1) c where rownum=1 order by c.BTime desc;
if nvl(aTime,'1980-01-01')<nvl(bTime,'1980-01-01') then
open result for
select User_id ,realname, (grade_auto+grade_manual) as MarkOrPass,0,Paper_Name from user_grade where paper_id=Paper_ID and rownum<=10 order by (grade_auto+grade_manual) desc;
else
open result for
select User_ID,RealName,Pass_Paper as MarkOrPass,1,Race_Name as PaperOrRace from user_race_grade where Race_ID=Race_ID and rownum<=10 order by Pass_Paper desc,Pass_Subject desc;
end if;
end;
end;
end Taixis;
System.Data.OracleClient.OracleException: ORA-24338: 未执行语句句柄
我在网上找了一些资料,说游标没有打开,或语句执行过程中出错导致游标没有打开。
我有些不明白。我明明open了呀,还有,如果编译通过的话,语句执行会出错吗?最多也就是没有返记录吧,为什么会出异常呢?
下面是我的存储过程创建包:
CREATE OR REPLACE PACKAGE TAIXIS as
TYPE myrctype IS REF CURSOR;
procedure list_getTaixis(result out myrctype);
end Taixis;
包体:
CREATE OR REPLACE PACKAGE BODY TAIXIS as
procedure list_getTaixis(result out myrctype)
is
begin
declare
aTime date;
Race_ID int;
Race_Name varchar(200);
bTime date;
Paper_ID int;
Paper_Name varchar(200);
begin
select c.Paper_ID, c.BTime,c.Paper_Name into Paper_ID ,bTime,Paper_Name from
(select a.Paper_ID,a.BTime,a.Paper_Name,b.Grade_ID from PAPER_INFO a , USER_GRADE b where a.Paper_ID=b.Paper_ID and a.Show_Grade=1 and a.Paper_Type=1 and rownum=1 and b.Grade_Mode=1) c
order by c.BTime Desc;
select c.Race_ID,c.BTime,c.Race_Name into Race_ID,aTime,Race_Name from (Select a.Race_ID,a.BTime,a.Race_Name,b.Grade_ID from RACE_IN_INFO a ,USER_RACE_GRADE b where a.Race_ID=b.Race_ID and a.Show_Grade=1) c where rownum=1 order by c.BTime desc;
if nvl(aTime,'1980-01-01')<nvl(bTime,'1980-01-01') then
open result for
select User_id ,realname, (grade_auto+grade_manual) as MarkOrPass,0,Paper_Name from user_grade where paper_id=Paper_ID and rownum<=10 order by (grade_auto+grade_manual) desc;
else
open result for
select User_ID,RealName,Pass_Paper as MarkOrPass,1,Race_Name as PaperOrRace from user_race_grade where Race_ID=Race_ID and rownum<=10 order by Pass_Paper desc,Pass_Subject desc;
end if;
end;
end;
end Taixis;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货