问题描述
jsp页面调用oracle存储过程为什么总是报ORA-08103:objectnolongerexists错误提示呢?调用代码:{callINDI_QUERY_AAA(?)}我在别的贴上看到这样答案:就是如果oracle存储过程中有insert,update,delete这些语句并且有返回cursor这样的类型,需要显式设置conn.setAutoCommit(false),在调用过程后设置为conn.setAutoCommit(true);就可以了。我的存储过程中也有insert,update,delete这些语句并且有返回cursor这样的类型,但我不知道怎么编写方法来设置:conn.setAutoCommit(true);请各位java高手们帮忙帮忙,谢谢了各位!
解决方案
解决方案二:
ORA-08103:objectnolongerexists跟auto不autocommit没有鸟毛关系。这个错误是因为你调用的某个对象不存在!!!检查当前用户下是否存在你那个存储过程!如果存在在其他用户下,需要callotherUser.存储过程!
解决方案三:
当前用户下是存在那个存储过程的!因为我们都可以查询到存储过程的字段列出来了,就是数据不出来。点预览数据的时候就提示以上的错误。
解决方案四:
是不是使用了临时表?是不是在存储过程总使用了commit??把你的存储过程拿来晒晒。。
解决方案五:
是用了临时表了。以下是调用的存储过程,这个里面还有调用另外一个存储过程,另外一个太长了。createorreplaceprocedureindi_query_AAA(p_cursoroutpak_return_procdata.cur_returndata)isv_rownubenumber;v_rownube_charvarchar2(100);v_indiobjidvarchar2(100);CURSORp_indiobjidISselectt.indiobjidfromindi_t_indibilldetailtwheret.billtypeobjid='3001096700000001'andrownum<=3ORDERBYt.indiobjid;BEGINDBMS_OUTPUT.ENABLE(1000000000);OPENp_indiobjid;v_rownube:=0;LOOPv_rownube:=v_rownube+1;v_rownube_char:=right('01000'||to_char(v_rownube),5);FETCHp_indiobjidINTOv_indiobjid;EXITWHENp_indiobjid%NOTFOUND;indi_query_NN(v_rownube_char,v_indiobjid,'','0');dbms_output.put_line(v_indiobjid);ENDLOOP;openp_cursorforselect*fromTEMP_AAA;CLOSEp_indiobjid;END;
解决方案六:
然后我在页面上就需要调用这存储过程,得到结果显示出来就可以了。当调用这个存储过程的时候,就会报那样的错误。
解决方案七:
临时表的建表语句看看。还有conn.setAutoCommit(false);指的是在java中调用存储过程之前,获得连接之后,马上做这个。