代码之家  ›  专栏  ›  技术社区  ›  Brian Deterling

如何将生成的密钥从执行insert的DB2存储过程返回给JDBC?

  •  1
  • Brian Deterling  · 技术社区  · 15 年前

    我有一个简单的存储过程,它对具有标识主键列的表进行插入。我需要获取插入生成的密钥。我更喜欢使用标准的JDBCGetGeneratedKeys方法,但我不确定存储过程需要执行/返回什么来构建结果集。我的最终目标是在Hibernate中实现这一点。我还尝试使用选择标识生成器,但它始终返回0。

    4 回复  |  直到 15 年前
        1
  •  1
  •   Fred Sobotka Fred Sobotka    15 年前

    SELECT pkey FROM FINAL TABLE (INSERT INTO tab(a, b, c, d) VALUES ... )
    
        2
  •  0
  •   mjn anonym    15 年前

    在DB2/400上,似乎是IDENTITY_VAL_LOCAL()函数,它为IDENTITY列返回最近分配的值。

    http://publib.boulder.ibm.com/infocenter/db2luw/v8/topic/com.ibm.db2.udb.doc/admin/r0004231.htm

        3
  •  0
  •   weiyin    15 年前

    我从未尝试过identity val local()函数;在我自己的存储过程中,我只是在插入之后执行一个SELECT。但您可以让存储过程返回结果集:

    create procedure proc1(
    IN in_val
    )
    language sql
    dynamic result sets 1
    
    BEGIN
    -- do insert
    
    BEGIN
    DECLARE c_out CURSOR WITH RETURN TO CLIENT FOR
      select max(key) as inserted_key from table where val = in_val
    FOR READ ONLY;
    
    OPEN c_out;
    END;
    
    END;
    

        4
  •  0
  •   kishore    15 年前

    存储过程可以使用identity val local获取生成的值,并将其作为输出参数传递给Java程序。插入后选择不是一个好主意,因为其他进程可能已将新数据插入到表中,并会导致数据完整性问题。