0

我正在尝试在 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)。那么我应该在这里使用哪些类型?

4

1 回答 1

0

好的,所以我找到了一个可以解决我的问题的链接(iDevelopment)。这是我用的

connection = dataSource.getConnection();
CallableStatement statement = connection.prepareCall(TIMESHEET_QUERY);
statement.registerOutParameter(1, OracleTypes.CURSOR);
statement.setDate(2, new java.sql.Date(dateFrom.getTime()));
statement.setDate(3, new java.sql.Date(dateTo.getTime()));
statement.execute();

ResultSet set = (ResultSet) statement.getObject(1);

一切都是直接的,javax.sql.*因此不需要 Oracle 特定的 API。

于 2012-11-02T11:14:14.337 回答