В рамках рефакторинга я пытаюсь изменить вызовы базы данных, чтобы использовать Spring 4.1.0.RELEASE, чтобы обрабатывать соединения и исключения и разрешать передачу наборов результатов между функциями и классами.
У меня нормально работают вызовы хранимых процедур MS SQL Server, но когда я попытался выполнить хранимую процедуру Oracle, я получил следующее сообщение об ошибке:
2014-11-13 15:39:35,836 ERROR [io.undertow.request] (default task-1) UT005023: Exception handling request to /EmailServiceLayer/EmailServletClient/springtest/123:
org.jboss.resteasy.spi.UnhandledException: org.springframework.jdbc.BadSqlGrammarException: CallableStatementCallback;
bad SQL grammar [{call SPRING_JDBC_TEMPLATE_TEST()}]; nested exception is java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00201: identifier 'SPRING_JDBC_TEMPLATE_TEST' must be declared
Я упростил проблему, написав пару очень простых хранимых процедур, которые пишут в тестовую таблицу: одна принимает параметр и записывает, а другая не принимает параметров и просто записывает жестко заданное значение. Эти процедуры находятся в схеме INV, которая является тем же пользователем, на использование которого настроен мой источник данных.
В конце концов я попытался запустить его в своей личной схеме, используя источник данных, настроенный на использование моих личных учетных данных, и это удалось. У меня был грант администратора, чтобы выполнить все процедуры в INV, но все равно не повезло. Я подтвердил, что могу успешно выполнять простые встроенные вставки в схему INV, используя Spring JdbcTemplate.execute().
Мои первые попытки заключались в использовании JdbcTemplate с CallableStatementCreator моего собственного определения. Затем я попытался использовать SimpleJdbcCall, и я обнаружил, что это работает на моей личной схеме. Оба способа дают одно и то же сообщение об ошибке в схеме INV. Вот код моей последней попытки:
SimpleJdbcCall caller = new SimpleJdbcCall(alex3InvTemplate).withProcedureName("spring_jdbc_template_test");
MapSqlParameterSource paramMap = new MapSqlParameterSource();
paramMap.addValue("p_testval", testval);
Map<String, Object> result = caller.execute(paramMap);
и мой тестовый процесс:
create or replace
procedure spring_jdbc_template_test
(
p_testval IN number
)
as
begin
insert into jdbc_template_test_table values(p_testval);
commit;
end;
Мое приложение работает на сервере Wildfly 8.0.0.Final. Конфигурации источника данных для двух схем абсолютно одинаковы, за исключением учетных данных, используемых для входа в систему. Я могу выполнять процедуры в INV, используя один и тот же источник данных с базовым JDBC CallableStatement, и я подтвердил, что могу запускать их в SQL. Разработчик.
Заранее благодарю за любую помощь.
INV.SPRING_JDBC_TEMPLATE_TEST
2. Попробуйте выполнитьselect count(*) from all_procedures where owner = 'INV' and object_name = 'SPRING_JDBC_TEMPLATE_TEST';
- результат должен быть ›=1
3. Это может быть особенность вашего фреймворка - в данном случае я не смог помочь - person Dmitriy   schedule 14.11.2014select user from dual
. Потому что я не верю в чудеса ;) - person Dmitriy   schedule 15.11.2014