1

我有以下功能规范:

FUNCTION FUNC_GET_SOMETHING_FROM_DATABASE ( IN_parameter1 IN VARCHAR2,
                                            IN_parameter2 IN VARCHAR2,
                                            IN_parameter3 IN VARCHAR2,
                                            IN_parameter4 IN VARCHAR2,
                                            IN_parameter5 IN VARCHAR2,
                                            IN_parameter6 IN VARCHAR2)

返回 REFURTYP;

以下是我在 Java 中调用 Oracle 中的函数的方法:

公共列表<SomeVO> getLogReport(
            字符串参数1,字符串参数2,字符串参数3,
            字符串参数4,字符串参数5,
            字符串参数6) 抛出 BlahException, RemoteDataAccessException {

        矢量<对象> 参数 = 新矢量<对象>();

        DataCollectionImpl<LogReportVO> someData = new DataCollectionImpl<LogReportVO>(
                日志报告VO.class);

                // 输入参数

        params.add(parameter1);
        params.add(parameter2);
        params.add(parameter3);
        params.add(parameter4);
        params.add(parameter5);
        params.add(parameter6);


        //输出参数
        params.add(new DBParameter(DBParameter.OUT, DBParameter.CURSOR));

        尝试 {
            调用存储过程(
                    常量.FUNC_GET_SOMETHING_FROM_DATABASE,参数);
        } 捕捉(远程数据访问异常 e){
            throw new BlahException("LogReportDAO",
                    "getLogReport", e.getMessage(),
                    e.getRealException());
        }
        返回 someData.getDataCollectionObjects();
    }

我得到的错误是:

wrong number or types of arguments in call

附加信息:

protected void callStoredProcedure(String procedureName, Vector params) 抛出 RemoteDataAccessException {
        callStoredProcedure(getSchema(), procedureName, params);
    }

    protected void callStoredProcedure(String schema, String procedureName, Vector params) 抛出 RemoteDataAccessException {
        callStoredProcedure(getDatasource(), 模式, procedureName, params);
    }

    protected void callStoredProcedure(String dataSourceName, String schema, String procedureName, Vector params) 抛出 RemoteDataAccessException {
        getOracleConnection(dataSourceName).callStoredProcedure(
                getFullyQualifiedProcedureName(schema, procedureName), params);
    }

    私有OracleConnection getOracleConnection(字符串数据源){   
        OracleConnection oraConn = null;
        尝试 {   
            oraConn = new OracleConnection(datasource);
        } 捕捉(RemoteDataAccessException rdae){  
            log.fatal("BaseDAO.getOracleConnection" + rdae.getMessage(), rdae);
        } 捕捉(即例外){    
            log.fatal("BaseDAO.getOracleConnection" + ie.getMessage(), ie);
        }

        返回 oraConn;
    }

4

1 回答 1

1

您的代码很可能没有考虑存储过程的返回值。

为什么不使用标准的 JDBC 方式来调用存储过程呢?它就像一个魅力。

http://docs.oracle.com/javase/1.5.0/docs/guide/jdbc/getstart/callablestatement.html

于 2011-12-16T20:46:42.707 回答