Ошибка при вызове хранимой процедуры из Spring Data - PullRequest
0 голосов
/ 23 февраля 2020

Я пробовал несколько разных способов доступа к моей хранимой процедуре через приложение весенней загрузки, но у меня всегда есть ошибки, такие как:

InvalidDataAccessResourceUsageException: не удалось извлечь ResultSet; SQL [н / п]; вложенным исключением является org.hibernate.exception.SQLGrammarException: не удалось извлечь ResultSet

или

. Причина: java. sql .SQLException: ORA-06550 : строка 1, столбец 7: PLS-00201: должен быть объявлен идентификатор 'MY_STORED_PROCEDURE_NAME' ORA-06550: строка 1, столбец 7: PL / SQL: оператор игнорируется

Я пытался:

 StoredProcedureQuery procedureQuery = entityManager.createStoredProcedureQuery("MY_STORED_PROCEDURE_NAME");
        procedureQuery.registerStoredProcedureParameter("paramOut", Object.class, ParameterMode.OUT);
        procedureQuery.execute();
        procedureQuery.getOutputParameterValue("paramOut");

@Transactional
@Procedure(procedureName= "MY_STORED_PROCEDURE_NAME" )
Object getNextNumber();

@Query(value = "{call MY_STORED_PROCEDURE_NAME()}", nativeQuery = true)
@Transactional
Object getNextNumber();

но всегда кажется, что он не может получить доступ к моей хранимой процедуре в моей БД: я добавил грантовое выполнение на ... в ... но это не решает проблему

Любая идея, пожалуйста

1 Ответ

0 голосов
/ 24 февраля 2020

Спасибо за ваш ответ. Итак, я решил ошибку, связанную с вызовом хранимой процедуры, указав перед процедурой имя с именем владельца:

my_schema.my_stored_procedure_name

и используйте

EXECUTE IMMEDIATE 'UPDATE ...

внутри хранимой процедуры

java код

`StoredProcedureQuery protocolQuery entityManager .createStoredProcedureQuery ("my_schema.MY_STORED_PROCEDURE_NAME");

procedureQuery.registerStoredProcedureParameter("in1", Long.class, 
ParameterMode.IN);

procedureQuery.registerStoredProcedureParameter("in2", String.class, 
ParameterMode.IN);
procedureQuery.registerStoredProcedureParameter("out1", Long.class, 
ParameterMode.OUT);

 procedureQuery.registerStoredProcedureParameter("out2", String.class, 
 ParameterMode.OUT);

        procedureQuery.setParameter("in1", val1);
        procedureQuery.setParameter("in2", val2);
        procedureQuery.execute();
        procedureQuery.getOutputParameterValue("out1");
        procedureQuery.getOutputParameterValue("out2");`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...