全局临时表有时在调用存储过程时抛出SQL Integrity约束异常

时间:2014-03-03 15:10:47

标签: spring db2

我正在尝试调试工作中的错误。它使用存储过程(在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异常看起来似乎没有发生?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

数据库会话绑定到连接。假设您遵循了性能的一般准则,那么您就拥有了一个连接池。基本上连接被重用,因此会话永远不会被破坏。