我正在尝试在 Java 中调用存储函数。函数没有包,它被放在用户(模式) USER 下并返回一个游标。我尝试了两种方法来调用它,但这些都不起作用。
第一
Query query = coreDao.getEntityManager().createNativeQuery("{call USER.gen_rephead_sm_task_report(?, ?) }");
query.setParameter(1, dateFrom);
query.setParameter(2, dateTo);
List<?> queryResult = query.getResultList();
我有一个not a procedure or not defined
我也尝试过这种方法
select gen_rephead_sm_task_report(?, ?) from dual
作为 createNativeQuery 参数,但结果相同。
第二个
Connection connection = dataSource.getConnection();//javax.sql.DataSource
CallableStatement statement = connection.prepareCall("{? = call USER.gen_rephead_sm_task_report(?, ?) }");
statement.registerOutParameter(1, OracleTypes.CURSOR);//oracle.jdbc.OracleTypes
statement.setDate(2, new java.sql.Date(dateFrom.getTime()));
statement.setDate(3, new java.sql.Date(dateTo.getTime()));
statement.executeQuery();
ResultSet set = ((OracleCallableStatement) statement).getCursor(1);
我ClassCastException
在最后一行得到了(显然 OracleCallableStatement 没有实现 CallableStatement)。那么我应该在这里使用哪些类型?