|
|
|
Помогите пожалуйста вызвать хранимку спрингом!
|
|||
|---|---|---|---|
|
#18+
Есть хранимка: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. есть классец: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. который вызываю так: String dep = "Департамент 1"; String tokens = {"параметр 1", "параметр 2", "параметр 3", "параметр 4", "параметр 5"}; FindTemplatesByTokensStoredProc proc = new FindTemplatesByTokensStoredProc( jdbcTempl.getDataSource()); Map results = proc.execute(dep, tokens); И получаю Exception in thread "main" org.springframework.jdbc.BadSqlGrammarException: CallableStatementCallback; bad SQL grammar [{? = call PORTAL.PORTAL_SEARCH.FIND_TEMPLATES_BY_TOKENS(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}]; nested exception is java.sql.SQLException: ORA-06550: Строка 1, столбец 13: PLS-00382: выражение неправильного типа ORA-06550: Строка 1, столбец 7: PL/SQL: Statement ignored at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:231) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:1137) at org.springframework.jdbc.core.JdbcTemplate.call(JdbcTemplate.java:1173) at org.springframework.jdbc.object.StoredProcedure.execute(StoredProcedure.java:142) at ru.sbrf.searcher.db.sp.FindTemplatesByTokensStoredProc.execute(FindTemplatesByTokensStoredProc.java:33) at ru.sbrf.searcher.db.DataProvider.queryTemplates(DataProvider.java:48) at ru.sbrf.searcher.app.SearchTempl.main(SearchTempl.java:19) Caused by: java.sql.SQLException: ORA-06550: Строка 1, столбец 13: PLS-00382: выражение неправильного типа ORA-06550: Строка 1, столбец 7: PL/SQL: Statement ignored at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399) at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1059) at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522) at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257) at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:587) at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:220) at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:48) at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:938) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1150) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:4798) at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:4901) at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:5631) at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1385) at org.springframework.jdbc.core.JdbcTemplate$6.doInCallableStatement(JdbcTemplate.java:1176) at org.springframework.jdbc.core.JdbcTemplate$6.doInCallableStatement(JdbcTemplate.java:1173) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:1121) ... 5 more В чем ошибка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 11:43 |
|
||
|
Помогите пожалуйста вызвать хранимку спрингом!
|
|||
|---|---|---|---|
|
#18+
по-моему, в вызове пропущено название оракловского пакета: Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 11:55 |
|
||
|
Помогите пожалуйста вызвать хранимку спрингом!
|
|||
|---|---|---|---|
|
#18+
ivanra, Я в какой-то момент вытащил ее из пакета и пробовал вызывать так. Не помогло, та же ошибка. В коде забыл вернуть обратно, виноват. Сейчас в коде Ваш вариант, не работает, ошибка та же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 12:06 |
|
||
|
Помогите пожалуйста вызвать хранимку спрингом!
|
|||
|---|---|---|---|
|
#18+
Саабразим Аль-каши Бухани, {? = call PORTAL.PORTAL_SEARCH.FIND_TEMPLATES_BY_TOKENS(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)} ->10 IN параметров А Вы задаете 11 declareParameter(new SqlParameter("DEP", Types.VARCHAR)); ->1 for (int i = 1; i <= 10; i++) -> +10 declareParameter(new SqlParameter("Param" + i, Types.VARCHAR)); надо i < 10 или что у Вас с версиями процедуры не то, на сервере 10, а Вы привели с 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 12:17 |
|
||
|
Помогите пожалуйста вызвать хранимку спрингом!
|
|||
|---|---|---|---|
|
#18+
0FDСаабразим Аль-каши Бухани, {? = call PORTAL.PORTAL_SEARCH.FIND_TEMPLATES_BY_TOKENS(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)} ->10 IN параметров А Вы задаете 11 Дык 11 и надо, 10 вида ParamX и 1 Dep. Не понимаю, почему генерится с 10 параметрами? И в дебагере видно, что создается 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 12:54 |
|
||
|
Помогите пожалуйста вызвать хранимку спрингом!
|
|||
|---|---|---|---|
|
#18+
Саабразим Аль-каши Бухани, в StoredProcedure есть public void setFunction(boolean function). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 13:07 |
|
||
|
Помогите пожалуйста вызвать хранимку спрингом!
|
|||
|---|---|---|---|
|
#18+
0FD, И я его вызываю в конструкторе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 13:17 |
|
||
|
Помогите пожалуйста вызвать хранимку спрингом!
|
|||
|---|---|---|---|
|
#18+
Саабразим Аль-каши Бухани, Вижу. Я не знаю какая у вас верси, но тут https://github.com/spring-projects/spring-framework/blob/master/spring-jdbc/src/main/java/org/springframework/jdbc/object/SqlCall.java в protected final void compileInternal() баг и первый ? не попадает. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 14:02 |
|
||
|
Помогите пожалуйста вызвать хранимку спрингом!
|
|||
|---|---|---|---|
|
#18+
0FD, Вот так работает. Хотя оба параметра в isResultsParameter() возвращают false... declareParameter(new SqlOutParameter ("RETURN_VALUE", OracleTypes.CURSOR, MAPPER)); Ну да ладно. Спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 14:18 |
|
||
|
Помогите пожалуйста вызвать хранимку спрингом!
|
|||
|---|---|---|---|
|
#18+
Саабразим Аль-каши Бухани, Значит не баг, я никогда не использовал spring.jdbc, судя по всему вы не так используете SqlReturnResultSet, который : Represents a returned {@link java.sql.ResultSet} from a stored procedure call . и если использовать SqlOutParameter, тогда нормально работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2015, 14:43 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38883736&tid=2125784]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
166ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 489ms |

| 0 / 0 |
