核心报错信息:java.sql.SQLException: 无法对 PLSQL 语句执行提取: next 这段代码在老环境执行没问题,在新环境搭了新的数据库执行报错,所以先怀疑数据库设置有问题,不知道有谁碰到类似问题并解决了的,求帮忙~谢谢大家~
java代码:
try {
cs = connectionLocal.prepareCall("{call rmman.rm_ruleset_management.gettransactionid(?)}");
cs.registerOutParameter(1, java.sql.Types.VARCHAR);
rs=cs.executeQuery();
if(rs.next()){
seqID = cs.getString(1);
}
}
catch (SQLException e) {
throw new DAOException("获取操作事务序列ID时,SQL语句执行错误", e);
}
在pl\sql写了调用存储过程的代码,执行没有问题:
SQL> set serverout on;
SQL>
SQL> DECLARE
2 transactionid varchar2(100) ;
3 BEGIN
4 rmman.rm_ruleset_management.gettransactionid(transactionid);
5 dbms_output.put_line('transactionid: 'transactionid );
6 END;
7 / 报错信息:
caused by:
java.sql.SQLException: 无法对 PLSQL 语句执行提取: next
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:192)
at weblogic.jdbc.wrapper.ResultSet_oracle_jdbc_driver_OracleResultSetImpl.next(Unknown Source)
at com.paic.pafa.framework.dao.ResultSetWrapper.next(ResultSetWrapper.java:144)
at com.paic.rule.filemgmt.integration.dao.BaseInfoOprBakDAO.getTransID(BaseInfoOprBakDAO.java:465)
at com.paic.rule.filemgmt.integration.dao.BaseInfoOprBakDAO.addRuleSetFile(BaseInfoOprBakDAO.java:326)
at com.paic.rule.filemgmt.integration.dao.DataBaseDAO.addRuleSetFile(DataBaseDAO.java:1001)
at com.paic.rule.filemgmt.business.facade.DAOFacade.addRuleSetFile(DAOFacade.java:531)
at com.paic.rule.filemgmt.business.facade.DAOFacadeEJBBean.addRuleSetFile(DAOFacadeEJBBean.java:116)
at com.paic.rule.filemgmt.business.facade.DAOFacadeEJB_8ed3le_EOImpl.addRuleSetFile(DAOFacadeEJB_8ed3le_EOImpl.java:964)
at com.paic.rule.filemgmt.business.facade.DAOFacadeEJB_8ed3le_EOImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:492)
at weblogic.rmi.cluster.ReplicaAwareServerRef.invoke(ReplicaAwareServerRef.java:108)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:435)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:430)
at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:35)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
java代码:
try {
cs = connectionLocal.prepareCall("{call rmman.rm_ruleset_management.gettransactionid(?)}");
cs.registerOutParameter(1, java.sql.Types.VARCHAR);
rs=cs.executeQuery();
if(rs.next()){
seqID = cs.getString(1);
}
}
catch (SQLException e) {
throw new DAOException("获取操作事务序列ID时,SQL语句执行错误", e);
}
在pl\sql写了调用存储过程的代码,执行没有问题:
SQL> set serverout on;
SQL>
SQL> DECLARE
2 transactionid varchar2(100) ;
3 BEGIN
4 rmman.rm_ruleset_management.gettransactionid(transactionid);
5 dbms_output.put_line('transactionid: 'transactionid );
6 END;
7 / 报错信息:
caused by:
java.sql.SQLException: 无法对 PLSQL 语句执行提取: next
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:192)
at weblogic.jdbc.wrapper.ResultSet_oracle_jdbc_driver_OracleResultSetImpl.next(Unknown Source)
at com.paic.pafa.framework.dao.ResultSetWrapper.next(ResultSetWrapper.java:144)
at com.paic.rule.filemgmt.integration.dao.BaseInfoOprBakDAO.getTransID(BaseInfoOprBakDAO.java:465)
at com.paic.rule.filemgmt.integration.dao.BaseInfoOprBakDAO.addRuleSetFile(BaseInfoOprBakDAO.java:326)
at com.paic.rule.filemgmt.integration.dao.DataBaseDAO.addRuleSetFile(DataBaseDAO.java:1001)
at com.paic.rule.filemgmt.business.facade.DAOFacade.addRuleSetFile(DAOFacade.java:531)
at com.paic.rule.filemgmt.business.facade.DAOFacadeEJBBean.addRuleSetFile(DAOFacadeEJBBean.java:116)
at com.paic.rule.filemgmt.business.facade.DAOFacadeEJB_8ed3le_EOImpl.addRuleSetFile(DAOFacadeEJB_8ed3le_EOImpl.java:964)
at com.paic.rule.filemgmt.business.facade.DAOFacadeEJB_8ed3le_EOImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:492)
at weblogic.rmi.cluster.ReplicaAwareServerRef.invoke(ReplicaAwareServerRef.java:108)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:435)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:430)
at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:35)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
SQL> set serverout on;
SQL>
SQL> DECLARE
2 transactionid varchar2(100) ;
3 BEGIN
4 rmman.rm_ruleset_management.gettransactionid(transactionid);
5 dbms_output.put_line('transactionid: 'transactionid );
6 END;
7 / transactionid: RTN00000000000000003232 PL/SQL procedure successfully completed
cs = connectionLocal.prepareCall("{call rmman.rm_ruleset_management.gettransactionid(?)}");
cs.registerOutParameter(1, java.sql.Types.VARCHAR);
cs.execute();
seqID = cs.getString(1);
}
catch (SQLException e)
{ throw new DAOException("获取操作事务序列ID时,SQL语句执行错误", e); }