2012-11-02 5 views
0

Java에서 저장 함수를 호출하려고합니다. 함수에는 패키지가 없으며 사용자 (스키마) USER 아래에 배치되어 커서를 반환합니다. 나는 그것을 부르는 데 20 년을 노력했지만이 작품들 중 아무 것도 시도하지 않았다. 먼저 하나Java에서 저장된 함수 호출을 호출하는 중

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

나는 또한 createNativeQuery 매개 변수로하지만 같은 결과

select gen_rephead_sm_task_report(?, ?) from dual 

이 접근을 시도 얻었다. 하나

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); 

둘째

나는 (분명히 OracleCallableStatement가 된 CallableStatement를 구현하지 않습니다) 마지막 줄에 ClassCastException을 얻었다. 그래서 여기에 어떤 종류의 소리를 사용합니까?

+0

어떤 드라이버를 사용하십니까? – user75ponic

+0

'odbc-6.11.2.0.1.0'과 함께'Oracle 11g'을 사용하고 있습니다. –

+0

'statement.executeQuery()'대신'statement.execute()'를 시도하십시오 – MaVRoSCy

답변

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.*에서 그래서 오라클 특정 API에 대한 필요가 없습니다

을 사용하는 것입니다.