从Java调用Oracle函数

从Java调用Oracle函数,java,oracle,oracle10g,stored-functions,Java,Oracle,Oracle10g,Stored Functions,我有以下功能规范: FUNCTION FUNC_GET_SOMETHING_FROM_DATABASE ( IN_parameter1 IN VARCHAR2, IN_parameter2 IN VARCHAR2, IN_parameter3 IN VARCHAR

我有以下功能规范:

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) RETURN REFCURTYP; 其他信息:

protected void callStoredProcedure(String procedureName, Vector params) throws RemoteDataAccessException { callStoredProcedure(getSchema(), procedureName, params); } protected void callStoredProcedure(String schema, String procedureName, Vector params) throws RemoteDataAccessException { callStoredProcedure(getDatasource(), schema, procedureName, params); } protected void callStoredProcedure(String dataSourceName, String schema, String procedureName, Vector params) throws RemoteDataAccessException { getOracleConnection(dataSourceName).callStoredProcedure( getFullyQualifiedProcedureName(schema, procedureName), params); } private OracleConnection getOracleConnection(String datasource) { OracleConnection oraConn = null; try { oraConn = new OracleConnection(datasource); } catch (RemoteDataAccessException rdae) { log.fatal("BaseDAO.getOracleConnection " + rdae.getMessage(), rdae); } catch (Exception ie) { log.fatal("BaseDAO.getOracleConnection" + ie.getMessage(), ie); } return oraConn; } 受保护的void callStoredProcedure(字符串过程重命名,向量参数)引发RemoteDataAccessException{ callStoredProcedure(getSchema(),procedureName,params); } 受保护的void CallStoredProcess(字符串架构、字符串过程重命名、向量参数)引发RemoteDataAccessException{ callStoredProcedure(getDatasource(),schema,procedureName,params); } 受保护的void CallStoredProcess(字符串数据源名称、字符串架构、字符串过程重命名、向量参数)引发RemoteDataAccessException{ getOracleConnection(dataSourceName).CallStoredProcess( getFullyQualifiedProcedureName(模式,过程重命名),参数; } 专用OracleConnection getOracleConnection(字符串数据源){ OracleConnection oraConn=null; 试试{ oraConn=新的OracleConnection(数据源); }捕获(RemoteDataAccessException rdae){ log.fatal(“BaseDAO.getOracleConnection”+rdae.getMessage(),rdae); }捕获(例外){ log.fatal(“BaseDAO.getOracleConnection”+ie.getMessage(),ie); } 返回oraConn; }
您的代码很可能没有考虑存储过程返回值

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


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

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


有没有想过为JDBC使用包装器,比如Mybatis3。在处理复杂类型时,它使工作更轻松。你是对的,但是现在时间是一个因素,所以我认为这是不可能的。我认为OUT参数有问题。你知道有什么办法可以解决这个问题吗?我真的不知道。我知道这一切都有可能发生在MyBatis身上。Out参数只是设置到参数对象上的字段中。很抱歉,我无法为您提供答案。我们如何猜测您在callStoredProcedure()中做了什么?添加了有关callStoredProcedure()的信息。是否想过为JDBC使用包装器,如Mybatis3。在处理复杂类型时,它使工作更轻松。你是对的,但是现在时间是一个因素,所以我认为这是不可能的。我认为OUT参数有问题。你知道有什么办法可以解决这个问题吗?我真的不知道。我知道这一切都有可能发生在MyBatis身上。Out参数只是设置到参数对象上的字段中。很抱歉,我无法为您提供答案。我们如何猜测您在callStoredProcedure()中做了什么?添加了有关callStoredProcedure()的信息感谢大家的支持,但我成功了。我只是在一个存储过程中调用了这个函数,它成功了。我以前有过这样的想法,但出于某种原因,我认为我没有更加努力。你是对的,但问题是我们正在使用某种设计模式,我不想违反它。以前没有人想到我们最终可能会使用表对象,因此我们从未公开过这样一个实用程序,它可以使直接函数调用更容易。感谢大家的支持,但我做到了。我只是在一个存储过程中调用了这个函数,它成功了。我以前有过这样的想法,但出于某种原因,我认为我没有更加努力。你是对的,但问题是我们正在使用某种设计模式,我不想违反它。以前没有人想到我们最终可能会使用表对象,因此我们从未公开过这样一个实用程序,它可以使直接函数调用更容易。
wrong number or types of arguments in call
protected void callStoredProcedure(String procedureName, Vector params) throws RemoteDataAccessException { callStoredProcedure(getSchema(), procedureName, params); } protected void callStoredProcedure(String schema, String procedureName, Vector params) throws RemoteDataAccessException { callStoredProcedure(getDatasource(), schema, procedureName, params); } protected void callStoredProcedure(String dataSourceName, String schema, String procedureName, Vector params) throws RemoteDataAccessException { getOracleConnection(dataSourceName).callStoredProcedure( getFullyQualifiedProcedureName(schema, procedureName), params); } private OracleConnection getOracleConnection(String datasource) { OracleConnection oraConn = null; try { oraConn = new OracleConnection(datasource); } catch (RemoteDataAccessException rdae) { log.fatal("BaseDAO.getOracleConnection " + rdae.getMessage(), rdae); } catch (Exception ie) { log.fatal("BaseDAO.getOracleConnection" + ie.getMessage(), ie); } return oraConn; }