我试图用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)。我在这里使用哪种类型?
答案 0 :(得分: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 Specific API。