【发布时间】:2015-03-11 04:31:07
【问题描述】:
我正在运行一些 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);
但是我面临一些奇怪的问题。我不知道为什么会这样。
另一个问题是,如果我从 Java 文件中调用此过程,并且如果 PLSql 过程中发生异常,该异常是否会打印为 DB2 异常?
错误:
[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,只有当它超过某个限制/长度时,它才会失败并给出这个错误。
EDIT 我解决/找到了错误,实际上我传递了一个长度超过定义的 VarChar 限制的字符串。 :)
【问题讨论】:
-
尝试从 SSMS 运行您的 SP。
-
不,它不会在任何情况下都失败。我已经更新了详细信息,请检查。
标签: java stored-procedures db2