Вызов функции оракула в Spring JPA - PullRequest
0 голосов
/ 10 января 2019

У меня есть

DECLARE
  c number;
BEGIN
  c := get_next_unlocked_id();
  DBMS_OUTPUT.put_line('id: ' || c);
END;

Этот результат запроса функции печати. Но мне нужно вернуть этот результат в моем репозитории JPA данных Spring или liciManager.

Я пытаюсь это:

@Override
    public Long getOld() {
        Long id = (Long) em.createNativeQuery("SELECT get_next_unlocked_id() FROM DUAL").getSingleResult();
        return id;
    } 

но я получаю ошибку:

2019-01-10 15: 28: 25.768 ERROR 6724 --- [pool-1-thread-2] o.h.engine.jdbc.spi.SqlExceptionHelper: ORA-14551: the DML operation cannot be performed inside the request
ORA-06512: on "MY.GET_NEXT_UNLOCKED_ID", line 8

1 Ответ

0 голосов
/ 10 января 2019

Функция, которую вы вызываете в функции выбора (get_next_unlocked_id), пытается изменить данные , что запрещено так, как вы это попробовали.

Проблема в том, что ваше решение, похоже, «запрашивает», в то время как фактически оно модифицирует данные. Я предполагаю, что ваша функция увеличивает счетчик или обновляет что-то? Полученный вами код ошибки ORA довольно нагляден, вот более подробное объяснение .

Решением в любом случае является использование CallableStatements из Java.

...