执行查询时出现奇怪的DB2异常

时间:2015-03-11 04:31:08

标签: java stored-procedures db2

我正在运行一些DB2查询,之后我调用了一个PL sql过程

调用程序

CallableStatement callStmt = con.prepareCall( //
        "CALL INIT_PAYROLL(?,?,?,?,?,?,?,?,?,?)");
// Set IN parameters
callStmt.setString(1, start_date);//IN
callStmt.setString(2, end_date); //IN
callStmt.setInt(3, customer_id);//IN
callStmt.setString(4, payrollMain_id+"");//IN
callStmt.setString(5, ruleFreq );//IN
callStmt.setInt(6, 0);
callStmt.setString(7, outerArray);//IN
callStmt.setString(8, commsSepEmps);//IN
callStmt.setInt(9, isIncremental);
callStmt.registerOutParameter (10, Types.VARCHAR);
//Call the procedure
callStmt.executeUpdate();
toReturnStatus = callStmt.getString(10);
System.out.println("OutPutResult--    : " + toReturnStatus);

但我面临一些奇怪的问题。我对于为什么会发生这种情况一无所知。 error snapshot

另一个问题是,如果我从Java文件中调用此过程,并且如果PLSql过程中发生异常,那么是否会将异常打印为DB2异常?

enter image description here

错误:

[2/27/15 17:00:15:778 IST] 0000280f SystemErr     R com.ibm.db2.jcc.am.SqlDataException: DB2 SQL Error: SQLCODE=-433, SQLSTATE=22001, SQLERRMC=129727:12068,133389:12069,133390:12070,133391:12071,133393:1, DRIVER=3.62.56

在此错误129727:12068中,是employee_id:primaryKeyOFtable,

编辑:SP在每种情况下都不会出问题,我在SP中传递逗号分隔的employeeIds,只有当它超过某个限制/长度时,才会失败并发出此错误。

编辑我解决/发现错误,实际上我传递的是一个长度超过定义的VarChar限制的字符串。 :)

1 个答案:

答案 0 :(得分:1)

22001 表示字符数据,发生右截断;例如,更新或插入值是对于列太长的字符串,或者无法将日期时间值分配给主变量,因为它太小。

以下是包含不同DB2错误代码的链接 https://urssanj00.wordpress.com/2008/03/04/db2-sql-error-code-and-description/