您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 乌海分类信息网,免费分类信息发布

关于ORA-01002 读取违反顺序

2024/3/5 16:22:19发布20次查看
关于ora-01002 读取违反顺序,end loop 进行了循环取值,但是在jdbc调用存储过程时,只需要返回一个结果集(cursor)就行,此时就
今天,运行自己写的jdbc调用存储过程时遇到了如下错误:
ora-01002 读取违反顺序
在网上百般寻找,大多数给出的建议是设置sql自动提交为false:cn.setautocommit(false);
但是这不是我的错误所在,我最后解决的时候也没有进行设置。
我的存储过程如下:
create or replace procedure tag(outs out sys_refcursor) is
allout sys_refcursor;
id  varchar2(16);
mid varchar2(16);
tty varchar2(16);
cty varchar2(16);
tid varchar2(16);
tna varchar2(16);
tva varchar2(16);
tsi varchar2(16);
tti varchar2(16);
pid varchar2(16);
nex varchar2(16);
gra char(4);
begin
open allout for select id,module_id,tag_type,control_type,tag_id,tag_name,tag_value,tag_size,tag_title,parent_id,next,grade
     into id,mid,tty,cty,tid,tna,tva,tsi,tti,pid,nex,gra from t_tag ;
--loop
--fetch allout into id,mid,tty,cty,tid,tna,tva,tsi,tti,pid,nex,gra;
--exit when allout%notfound;
--dbms_output.put_line(allout%rowcount||' '||id||' '||mid||' '||tty||' '||cty||' '||tid||' '||tna||' '||tva||' '||tsi||' '||tti||' '||pid||' '||nex||' '||gra);
--end loop;
outs:=allout;
end tag;
jdbc如下:
cn = dbfactory.getconn();
//cn.setautocommit(false);
    //system.out.println(创建声明);
cst =  cn.preparecall({call tag(?)} );
system.out.println(执行sql);
cst.registeroutparameter(1, oracle.jdbc.oracletypes.cursor);
cst.execute();
system.out.println(execute成功);
rs = (resultset) cst.getobject(1);
system.out.println(rs);
while(rs.next()){
                        }
我的错误在于所写存储过程中,由于想在pl-sql中运行出结果,所以采用了
loop
fetch into
end loop 进行了循环取值,但是在jdbc调用存储过程时,只需要返回一个结果集(cursor)就行,,此时就报“ 读取违反顺序”的错,解决办法:去掉loop....end loop 相应代码。
更多oracle相关信息见oracle 专题页面 ?tid=12
乌海分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录