我们在从应用程序调用存储过程时遇到问题.数据库是oracle 10g
这个proc有2个输入参数和2个输出参数.
输入1: - DB-List输入2: - 字符串
输出1: - 更新DB-List输出2: - 数字
当我们尝试使用时
Query q = session.createSQLQuery("{call proc_name(?,?,?,?)}");
Run Code Online (Sandbox Code Playgroud)
我们无法区分in参数和out参数.那么我们应该如何使用它来处理它.
另外,我们尝试使用可调用语句如下:
Session session = (Session) getEntityManager().getDelegate();
SessionImpl sessionImpl = ((SessionImpl) getEntityManager().getDelegate());
Connection cc = sessionImpl.connection();
CallableStatement callableStatement = null;
callableStatement = cc.prepareCall("{call proc_name(?,?,?,?)}");
ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("DB_LIST",callableStatement.getConnection());
ARRAY paramArray = new ARRAY(descriptor, callableStatement.getConnection(), array);
callableStatement.setArray(1, paramArray);
callableStatement.setString(2, "N");
callableStatement.registerOutParameter(3, OracleTypes.ARRAY, "DB_RETURN_LIST");
callableStatement.registerOutParameter(4, Types.INTEGER);
// executing the query
callableStatement.execute();
Run Code Online (Sandbox Code Playgroud)
我们收到以下错误:
javax.ejb.EJBException: java.lang.ClassCastException:
$Proxy50 cannot be cast …Run Code Online (Sandbox Code Playgroud)