java ora 01002_关于ORA-01002 读取违反顺序

今天,运行自己写的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 相应代码。

0b1331709591d260c1c78e86d0c51c18.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值