Я получил следующую ошибку из кода, который вызывает хранимую процедуру из java-кода:
Трассировка исключения {} org.springframework.jdbc.UncategorizedSQLException: CallableStatementCallback; не классифицированный SQLException для SQL [{вызов test.usp_xxx_GetCompanyDetails (?,?,?,?,?,?,?,?,?,?,?)}]; Состояние SQL [null]; код ошибки [0]; Значение не установлено для номера параметра 11; вложенное исключение - com.microsoft.sqlserver.jdbc.SQLServerException: значение не задано для номера параметра 11. на org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84) на org.springframework.jdbc. support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) в org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) в org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:1095) на org.springframework.jdbc.core.JdbcTemplate.call(JdbcTemplate.java:1131)
Приложение развернуто на WAS 8.5.5 и с использованием драйвера jdbc версии 4.2. При перезапуске сервера эта проблема больше не повторялась. Вызываемый следующий оператор вызова выглядит некорректным. Есть последовательные запятые без? между ними.
{call test.usp_xxx_GetCompanyDetails (?,?,?,?,?,?,?,?,?,?,?)}
Хранимая процедура имеет 10 параметров. Ниже приведено определение хранимой процедуры:
CREATE PROCEDURE [test].[usp_xxx_GetCompanyDetails]
(
@ANumber int,
@CompanyId int,
@UserRole varchar(15),
@RequestId varchar(100),
@CompanyCode varchar(5),
@BaseSystem varchar(5),
@PType varchar(20),
@PId varchar(40),
@IsActive bit,
@responseData xml OUT
)
Ниже приведен код Java, который вызывает вызов хранимой процедуры. Для передачи вызова используются данные весны.
private String executeProc(Integer aNumber,Integer companyId, String baseSystem,
String role,String companyCode,String requestId, String pType,String pId,
boolean isActive ) throws SQLException {
SQLXML responseData=null;
Map<String,Object> inputParams= new HashMap<>();
inputParams.put("ANumber", aNumber);
inputParams.put("CompanyId", companyId);
inputParams.put("UserRole", role);
inputParams.put("RequestId", requestId);
inputParams.put("CompanyCode", companyCode);
inputParams.put("BaseSystem", baseSystem);
inputParams.put("PType", pType);
inputParams.put("PId", pId);
inputParams.put("IsActive", isActive);
inputParams.put("ResponseData", responseData);
Map<String, Object> result = this.execute(inputParams);
String responseXMLString = ((SQLXML) result.get("ResponseData")).getString();
return responseXMLString;
}
Что могло пойти не так.