Я использую классы Spring JdbcTemplate и StoredProcedure. У меня проблемы с получением класса хранимых процедур для меня.
У меня есть хранимая процедура в базе данных оракула. Его подпись
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 ....
, где
* +1007 *
Я создал следующий класс хранимых процедур для получения информации из процедуры оракула
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
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
, и это тоже не сработало.