У меня проблема с вызовом хранимой процедуры в DB2. Если я запускаю его без java, он будет работать нормально. Может ли кто-нибудь помочь мне с этим? Проблема не зависит от переменной сообщения, и я не могу понять, что с ней не так.
Вот код:
CallableStatement cstmt = con.prepareCall("call tb.proc(?,?,?,?, ?)");
cstmt.setString(1, message);
cstmt.registerOutParameter(2, Types.VARCHAR);
cstmt.registerOutParameter(3, Types.VARCHAR);
cstmt.registerOutParameter(4, Types.INTEGER);
cstmt.registerOutParameter(5, Types.CHAR);
cstmt.executeUpdate();
Определение SP, по запросу, это вызывает другую хранимую процедуру :
CREATE PROCEDURE tb.proc (IN MESSAGE VARCHAR(300), OUT RESPONSE VARCHAR(300), OUT RESPMESSAGE VARCHAR(300), OUT E INTEGER, OUT ESTATE CHAR(5))
BEGIN
DECLARE varCode VARCHAR(300);
DECLARE varUPD_SID VARCHAR(300);
DECLARE varP_ZAPR VARCHAR(300);
DECLARE varDATE_PLREM VARCHAR(300);
DECLARE varDATE_PLSP VARCHAR(300);
DECLARE varP_XAR VARCHAR(300);
DECLARE varUPD_TIME VARCHAR(300);
DECLARE varUPD_USER VARCHAR(300);
DECLARE varOperation VARCHAR(300);
DECLARE varNINV VARCHAR(300);
DECLARE SQLCODE INTEGER;
DECLARE SQLSTATE CHAR(5);
DECLARE ErrorCode CHAR(5) DEFAULT NULL;
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
BEGIN
SET E = SQLCODE, ESTATE = SQLSTATE;
END;
CALL TB.SPLITMESSAGE(MESSAGE, varCode, varUPD_SID, varNinv, varOperation, varP_Zapr, varDate_Plrem, varDate_Plsp, varP_Xar);
CALL TB.VALIDATEFORMAT(varCode, varUPD_SID, varNinv, varOperation, varP_Zapr, varDate_Plrem, varDate_Plsp, varP_Xar, ErrorCode);
IF ErrorCode IS NULL
THEN
CALL TB.VALIDATEFIELDS(varCode, varUPD_SID, varNinv, varOperation, varP_Zapr, varDate_Plrem, varDate_Plsp, varP_Xar, ErrorCode);
END IF;
CALL TB.PROC2(Message, varCode, varUPD_SID, varNinv, varOperation, varP_Zapr, varDate_Plrem, varDate_Plsp, varP_Xar, ErrorCode,
RESPONSE, RESPMESSAGE);
END
и вот ошибка
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: arraycopy: length -1434 is negative
at java.base/java.lang.System.arraycopy(Native Method)
at com.ibm.db2.jcc.t4.x.a(x.java:102)
at com.ibm.db2.jcc.t4.x.a(x.java:150)
at com.ibm.db2.jcc.uw.UWReply.b(UWReply.java:62)
at com.ibm.db2.jcc.t4.x.c(x.java:360)
at com.ibm.db2.jcc.t4.x.d(x.java:375)
at com.ibm.db2.jcc.t4.x.f(x.java:646)
at com.ibm.db2.jcc.t4.y.ic(y.java:4622)
at com.ibm.db2.jcc.t4.y.hc(y.java:4607)
at com.ibm.db2.jcc.t4.ab.c(ab.java:3031)
at com.ibm.db2.jcc.t4.ab.b(ab.java:3021)
at com.ibm.db2.jcc.t4.ab.b(ab.java:2911)
at com.ibm.db2.jcc.t4.ab.a(ab.java:2767)
at com.ibm.db2.jcc.t4.ab.b(ab.java:2692)
at com.ibm.db2.jcc.t4.ab.a(ab.java:2606)
at com.ibm.db2.jcc.t4.ab.a(ab.java:173)
at com.ibm.db2.jcc.t4.ab.b(ab.java:84)
at com.ibm.db2.jcc.t4.p.b(p.java:69)
at com.ibm.db2.jcc.t4.rb.c(rb.java:244)
at com.ibm.db2.jcc.am.po.rc(po.java:3520)
at com.ibm.db2.jcc.am.po.wc(po.java:3644)
at com.ibm.db2.jcc.am.po.b(po.java:4421)
at com.ibm.db2.jcc.am.CallableStatement.ic(CallableStatement.java:194)
at com.ibm.db2.jcc.am.CallableStatement.executeUpdate(CallableStatement.java:173)