我收到此错误,为单个记录运行插入查询:
DB2 SQL错误:SQLCODE = -302,SQLSTATE = 22001,SQLERRMC = null, DRIVER = 3.62.56
异常:org.springframework.dao.DataIntegrityViolationException
我在IBM的帮助网站上看了这个,但是没有参数索引,我被困住了。 SQL状态似乎也指出它不是一个太大的值。
使用Spring的INSERT INTO [[TABLE_NAME]] VALUES (?,?,?,...)
查询格式为JdbcTemplate.update(String sql, Object... params)
。
这是为了工作,我不能发布架构或查询。我正在寻找调试此问题的一般建议。我已经知道使用Arrays.toString(Object[])
不会以SQL格式打印出来。
答案 0 :(得分:0)
要在手册中找到SQLCODE -302的解释,您需要搜索SQL0302N(DB2 SQLCODE值的一般规则是:“SQL”加上四位数,必要时用左边的零填充,再加上“N” “for”negative“因为-302是负数。”
如果安装了DB2命令行处理器,还可以使用它来查找错误代码:
db2 ? sql302
会产生类似这样的东西:
SQL0302N EXECUTE或OPEN中主机变量的值 声明 超出其相应用途的范围。
说明:
发现输入主机变量的值超出范围 它在SELECT,VALUES或预处理语句中的使用。
换句话说,INSERT
中的一个绑定变量对于目标列来说太大了。您需要将表列定义与您尝试插入的实际值进行比较。
答案 1 :(得分:0)
除了mustaccio的答案,您还可以使用SYSPROC.SQLERRM从sql获取信息。例如:
values SYSPROC.SQLERRM ('SQL302', '', '', 'en_US', 0)
SQL0302N The value of a host variable in the EXECUTE or OPEN statement
is out of range for its corresponding use.
Explanation:
...