Я получил следующую ошибку из кода, который вызывает хранимую процедуру из кода Java:
Исключительная трассировка {} org.springframework.jdbc.UncategorizedSQLException:
CallableStatementCallback; исключение SQLException для SQL [{call
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;
}
Что могло пойти не так.