我正在尝试在程序中实现批量更新,我想我可能会遇到DB2 jdbc驱动程序中的错误或其他问题。这是我的疑问:
insert into CONTENTSOURCE (CONTENTSOURCE_ID, CS_NAME) values (?, ENCRYPT(CAST(? as VARCHAR(280) FOR BIT DATA)))
以下是我对一个弹簧JdbcTemplate
的调用,单个插件可以正常工作。
query = QUERY_INSERT_ENCRYPT;
insert.update(
query,
new Object[] {
contentSourceId,
contentSourceObject.getContentSourceName()
.getBytes() });
但是当我批量尝试相同的操作时,我收到的错误似乎不适用于我的查询。
insertArgs.add(new Object[] { contentSource.getContentSourceId(),
contentSource.getContentSourceName().getBytes() });
returnArray = batchInsert.batchUpdate(QUERY_INSERT_ENCRYPT, insertArgs);
运行batchUpdate时,每一行都获得一个SQLCODE -312,但我没有对变量做任何事情。以下是从异常中删除的错误的一些输出。
Server error message: A NON-ATOMIC INSERT STATEMENT ATTEMPTED TO PROCESS MULTIPLE ROWS OF DATA, BUT ERRORS OCCURRED
--------------- SQLCA ---------------
Error code: -254
SQLERRMC: INSERT
token 0: INSERT
SQLERRP: DSNXRINS
SQLERRD(1): -400
SQLERRD(2): 0
SQLERRD(3): 0
SQLERRD(4): -1
SQLERRD(5): 0
SQLERRD(6): 0
SQLSTATE: 22530
Server error message: VARIABLE <unknown> IS NOT DEFINED OR NOT USABLE
--------------- SQLCA ---------------
Error code: -312
SQLERRMC: <unknown>
token 0: <unknown>
SQLERRP: DSNXRIHS
SQLERRD(1): -996
SQLERRD(2): 0
SQLERRD(3): 0
SQLERRD(4): -1
SQLERRD(5): 0
SQLERRD(6): 0
SQLSTATE: 42618
我从很久以前就发现了驱动程序的不同级别/版本的错误修复,所以我很困惑这是否是同一个问题。 http://www-01.ibm.com/support/docview.wss?uid=isg1PK85150#more 相关摘录:
所有连接:SQLCODE312(-312)带 “SqlSyntaxErrorException:VARIABLE未定义 运行PureQuery客户端时报告了“无法使用” 与DB2 z / OS的静态执行模式连接上的优化器 版本8或以上。问题与此有关 驱动程序使用的多行插入(MRI)支持 连接到DB2 z / OS时实现executeBatch() 版本8或以上。在这种情况下,语句受到约束 没有MRI用于动态执行模式但是 用MRI格式错误地执行静态 执行模式。 (115716)
所以,我做错了什么,或者是否可能在驱动程序中出现问题,我应该向IBM提出一个问题?