我正在尝试调试工作中的错误。它使用存储过程(在DB2中)和全局临时表来存储和返回结果。请考虑stored_proc
中的以下代码段declare global temporary table session.details
(
row_count integer not null generated always as identity,
...
)
with replace on commit delete rows not logged on rollback delete rows;
Spring框架正在调用stored_proc本身。 错误是有时(通常实际上)当Spring调用stored_proc时我会看到像
这样的错误[FMWGEN][DB2 JDBC Driver][DB2]INSERT/UPDATE INVALID; INDEX 1 RESTRICTS COLUMNS WITH SAME VALUES;
nested exception is java.sql.SQLIntegrityConstraintViolationException:
[FMWGEN][DB2 JDBC Driver][DB2]INSERT/UPDATE INVALID; INDEX 1 RESTRICTS COLUMNS WITH SAME VALUES
以下是调用此stored_proc
的java代码段SqlParameterSource parameterSource = new MapSqlParameterSource().addValue("v_input", input)
Map<String, Object> result = proc.execute(parameterSource);
proc是一个实例变量
private SimpleJdbcCall proc
this.proc =new SimpleJdbcCall(dataSource)
.withSchemaName("schema")
.withProcedureName("proc")
.declareParameters(
new SqlParameter("v_input", java.sql.Types.INTEGER)
).returningResultSet("output", new CustomRowMapper<String>());
根据IBM DB2文档,全局临时表被破坏并为每个会话重新创建,但是从sql异常看起来似乎没有发生?任何帮助表示赞赏。
答案 0 :(得分:0)
数据库会话绑定到连接。假设您遵循了性能的一般准则,那么您就拥有了一个连接池。基本上连接被重用,因此会话永远不会被破坏。