Хранимая процедура Spring - результаты, возвращающиеся из процедуры, всегда пустой

Я использую классы JdbcTemplate и StoredProcedure Spring. Я испытываю затруднения, заставляя класс хранимой процедуры работать на меня.

У меня есть хранимая процедура на базе данных оракула. Его подпись

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;

Я имею, создают следующий класс хранимой процедуры для получения информации из процедуры оракула

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

Я называю это в методе в одном из моих классов ДАО

    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 взаимодействовать с оракулом сохранило proc - таким образом, proc хорош. Разве неправильно смешаться OraceleTypes.CURSOR с Хранимой процедурой Spring? Что еще я могу использовать? Я также попробовал SqlReturnResultSet и это не работало также.

15
задан oksayt 2 August 2011 в 02:35
поделиться

1 ответ

Проблема здесь Этот способ оракула делать хранимые процедуры не соответствует JDBC. SPS Oracle возвращает данные результатов по сравнению с параметрами или значения возврата, которые являются курсорами, и они должны быть обработаны специально. Это означает, что вы не можете использовать любые вещи JDBC Spring, который предполагает соблюдение JDBC, вы должны сделать это самостоятельно.

На практике это означает, что вы должны использовать JDBCTEMPLATE и CallableStatementCallback , что означает намного больше ручного кодирования JDBC, чем вы в идеале, но я еще не нашел способ избежать этого.

На немножном стороне я скорее подозреваю, что Спец JDBC был записан, чтобы точно соответствовать Sybase (и, по ассоциации, SQL Server) способом выполнения вещей, потому что способом хранящихся процедур обрабатывается в JDBC, является замечательно хорошим Подходит для тех систем (и беда подходит для Oracle).

6
ответ дан 1 December 2019 в 04:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: