Я настроил базу данных H2 для тестирования, основной базой данных является ORacle, но я не могу вызвать фиктивную функцию H2 PL / SQL.
В моей схеме src / test / resources /.Файл sql:
create schema if not exists PKG_MY_PACKAGE;
create alias if not exists PKG_MY_PACKAGE.MY_FUNCTION for "com.utils.PkgMyPackage.myFunction";
src / test / java / com / util / PkgMyPackage.class:
package com.utils;
import java.math.BigDecimal;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class PkgMyPackage {
private static final Logger LOG = LoggerFactory.getLogger(PkgMyPackage .class);
public static BigDecimal myFunction(Integer input) {
LOG.debug("input: {}", input);
BigDecimal returnValue= new BigDecimal(input).multiply(BigDecimal.TEN);
LOG.debug("returnValue: {}", returnValue);
return returnValue;
}
}
мой код вызова функции:
SimpleJdbcCall call =
new SimpleJdbcCall(jdbcTemplate.getJdbcTemplate())
.withCatalogName("pkg_my_package")
.withFunctionName("my_function")
.withoutProcedureColumnMetaDataAccess()
.withReturnValue()
.declareParameters(new SqlOutParameter("return",Types.DECIMAL),
new SqlParameter("input", Types.NUMERIC));
SqlParameterSource paramMap =
new MapSqlParameterSource()
.addValue("input",1, Types.NUMERIC);
return call.executeFunction(BigDecimal.class, paramMap);
Регистратор внутри функций показывает правильные значения:
вход: 1 returnValue: 10
Но выдается исключение:
org.springframework.dao.DataIntegrityViolationException: CallableStatementCallback; SQL [{? = call PKG_OFFER_QUOTE_BREAKDOWN.FUNC_GET_TOTAL_BREAKDOWN_OFFER(?)}]; No hay datos disponibles.
No data is available [2000-197]; nested exception is org.h2.jdbc.JdbcSQLException: No hay datos disponibles.
No data is available [2000-197]
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:104)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1444)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:1107)
at org.springframework.jdbc.core.JdbcTemplate.call(JdbcTemplate.java:1146)
at org.springframework.jdbc.core.simple.AbstractJdbcCall.executeCallInternal(AbstractJdbcCall.java:413)
at org.springframework.jdbc.core.simple.AbstractJdbcCall.doExecute(AbstractJdbcCall.java:373)
at org.springframework.jdbc.core.simple.SimpleJdbcCall.executeFunction(SimpleJdbcCall.java:164)
Так чтокажется, это проблема при управлении результатами.