SpringのJdbcTemplateクラスとStoredProcedureクラスを使用しています。ストアドプロシージャクラスを機能させるのに問題があります。
Oracleデータベースにストアドプロシージャがあります。その署名は
CREATE OR REPLACE PROCEDURE PRC_GET_USERS_BY_SECTION
(user_cursor OUT Pkg_Types.cursor_type
, section_option_in IN Varchar2
, section_in IN Varchar2) AS ....
どこ
TYPE cursor_type IS REF CURSOR;
oracleプロシージャから情報を取得するために、次のストアドプロシージャクラスを作成しました
private class MyStoredProcedure extends StoredProcedure
{
public MyStoredProcedure(JdbcTemplate argJdbcTemplate)
{
super(argJdbcTemplate, "PRC_GET_USERS_BY_SECTION");
declareParameter(new SqlOutParameter("output", OracleTypes.CURSOR));
declareParameter(new SqlParameter("input1", Types.VARCHAR));
declareParameter(new SqlParameter("input2", Types.VARCHAR));
compile();
}
public Map<String, Object> execute() {
Map<String, Object> inParams = new HashMap<String, Object>();
inParams.put("input1", "BG");
inParams.put("input2", "FE");
Map output = execute(inParams);
return output;
}
}
DAOクラスの1つのメソッドでこれを呼び出しています
public List<String> getUserListFromProcedure() throws BatchManagerException
{
MyStoredProcedure sp = new MyStoredProcedure( this.jdbcTemplate );
Map<String, Object> result = new HashMap<String, Object>();
try
{
result = sp.execute();
}
catch( DataAccessException dae)
{
}
System.out.println(result.size());
return null;
}
ただし、マップのサイズは常に0であるため、何も返されません。私の入力基準に一致する行がデータベースにあることを知っています。java.sql.CallableStatement
また、オラクルのストアドプロシージャと対話するために使用されるコードが機能していたので、プロシージャは適切です。OraceleTypes.CURSOR
Springのストアドプロシージャと混合するのは間違っていますか?他に何を使用できますか?私も試しましたがSqlReturnResultSet
、それもうまくいきませんでした。