Как правильно вызывать хранимые процедуры в Sybase - PullRequest
0 голосов
/ 10 ноября 2011

Я пытаюсь вызвать некоторые устаревшие хранимые процедуры в базе данных Sybase (ASE 15), используя Spring JDBC.

У меня это работает довольно хорошо, но я не могу понять, как получить возвращаемое значение из proc.

Это код, который я получил:

@Repository
public class SybaseDao extends StoredProcedure {
    private static final String SQL = "db..proc_name";
    private static final String RETURN_VALUE = "rc";
    private static final String IN_DATA = "in_data";

    @Autowired
    public UpdateSybaseDao(DataSource dataSource) {
        super(dataSource, SQL);
        setFunction(true);
        declareParameter(new SqlOutParameter(RETURN_VALUE, NUMERIC));
        declareParameter(new SqlParameter(IN_DATA, NUMERIC));
        compile();
    }

    public void update(Integer inData) {
        Map<String, Object> inputs = new HashMap<String, Object>();
        inputs.put(IN_DATA, inData);
        Map<String, Object> results = execute(inputs);

        Integer returnValue = (Integer) results.get(RETURN_VALUE);
        if (returnValue > 0) {
            // handle this error
        }
    }
}

Хранимая процедура не очень важна, но она выполняет обновление и всегда возвращает 0. Если я выполняю один и тот же запрос с помощью какого-либо инструмента db, я получаю 0 правильно.

Обновление работает, и таблица изменяется, возвращаемое значение равно 3. Для меня это выглядит совершенно случайным.

Я делаю это правильно? Я что-то упускаю?

Я использую проприетарный драйвер Sybase jConnect 7, если это имеет значение.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2011

Отвечая на мой собственный вопрос.

Я действительно все делал правильно.Меня обмануло то, что возвращаемое значение из другого инструмента было неверным.Я никогда не думал об этом, и это действительно не имело смысла.

Во всяком случае ... кажется, мой подход работает.

0 голосов
/ 10 ноября 2011

Я недостаточно знаком со Spring, чтобы знать, прав я или нет, но что произойдет, если вы смените setFunction на false? Функции и хранимые процедуры - два разных животного, но я не знаю, различает ли Spring их.

...