关于ORA-01002 读取违反顺序

关于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

linux

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1928964.html

(0)
上一篇 2025年2月22日 20:56:23
下一篇 2025年2月22日 20:56:41

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Oracle万能分页法的存储过程

    Oracle万能分页法的存储过程 –创建一个包,在包中定义一个 游标类型 create or replace package testfenyepackage as type test oracle万能分页法的存储过程 &#82…

    数据库 2025年2月23日
    100
  • 如何创建Oracle新用户(新schema)

    Oracle中创建新的user, 也就相应地创建了一个新的schema, 用来区别其他目录的同时, 还保存所有相关user的数据对象以及user的表. Oracle中创建新的user, 也就相应地创建了一个新的schema, 用来区别其他目…

    数据库 2025年2月22日
    200
  • 浅谈Oracle执行计划

    要对sql语句进行分析,首先就是要去看sql语句的执行计划是否存在问题,oracle在10g之后,默认采用CBO基于代价的优化器,sql语句的 要对sql语句进行分析,首先就是要去看sql语句的执行计划是否存在问题,Oracle在10g之后…

    数据库 2025年2月22日
    200
  • Ant中执行Oracle存储过程

    Ant中执行Oracle存储过程,同样的oracle dll脚本: 从错误上看是一行结尾没有 同样的oracle dll脚本: 在Ant中运行出现错误如下 06/08/12 14:22:59.800 INFO: [ProcessWrappe…

    数据库 2025年2月22日
    200
  • ROWID走索引之嫌疑犯抓获

    通过自己做的分区表来分析,发现不走索引,而把原来的表结构改名,创建新表. 分析后发现 走索引了! 难道是分区的 储存参数? 还是分区 通过自己做的分区表来分析,发现不走索引,而把原来的表结构改名,创建新表. 分析后发现 走索引了! 难道是分…

    数据库 2025年2月22日
    200
  • ROWID走索引之判决

    ROWID走索引之判决,在NOT NULL 且数据位0的情况下 index的 block 为0,table的至少为1 那么index的cost就是0,CBO当然会选择cost ROWID走索引之判决: sql> select rowi…

    数据库 2025年2月22日
    200
  • ORA-12519错误的解决方案

    OERR: ORA-12519 TNS:no appropriate service handler found,客户端连接间歇性失败,报错ORA-12519 OERR: ORA-12519 TNS:no appropriate servi…

    数据库 2025年2月22日
    200
  • Oracle隐含参数scn不一致启动

    Oracle隐含参数:allow_resetlogs_corruption的使用提示:Oracle的隐含参数只应该在测试环境或者在Oracle Support的支持下使用or Oracle隐含参数:allow_resetlogs_corru…

    数据库 2025年2月22日
    200
  • Oracle更改端口后lsnrctl无法启动

    最近在研究Oracle 10G,先从安装的时候说起吧,安装的时候,由于默认端口1521已经被其他程序占了,装完oracle后,端口变成了1522 最近在研究Oracle 10G,先从安装的时候说起吧,,安装的时候,由于默认端口1521已经被…

    数据库 2025年2月22日
    200
  • 用PLSQL创建Oracle用户

    以SYSDBA身份登录PL; 2、右键“User”-gt;“New”新建用户; 3、弹出新建用户窗口,在“general”选项卡中,填写: name:用 以SYSDBA身份登录PL; 2、右键“User”->“New”新建用户; 3、…

    数据库 2025年2月22日
    200

发表回复

登录后才能评论