Java でストアド関数を呼び出そうとしています。関数にはパッケージがなく、ユーザー (スキーマ) USER の下に配置され、カーソルを返します。私はそれを呼び出すために2つの方法を試しましたが、これらの機能はありません。
最初の1つ
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を実装していません)。では、ここではどのタイプを使用する必要がありますか?