核心报错信息: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) 

解决方案 »

  1.   

    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 / transactionid: RTN00000000000000003232 PL/SQL procedure successfully completed
      

  2.   

    try {  
    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);  }