如何从执行插入的DB2存储过程将生成的键返回到JDBC?

时间:2009-03-21 23:06:42

标签: java jdbc db2

我有一个简单的存储过程,它使用标识主键列插入表。我需要获取插入生成的密钥。我更喜欢使用标准JDBC getGeneratedKeys方法,但我不确定存储过程需要做什么/返回来构建该结果集。我的最终目标是从Hibernate做到这一点。我也尝试使用select identity generator,但它总是返回0。

4 个答案:

答案 0 :(得分:1)

也可以从插入中选择:

SELECT pkey FROM FINAL TABLE (INSERT INTO tab(a, b, c, d) VALUES ... )

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我从未尝试过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;

您可以使用identity val local替换select with“select identity val local()from sysibm.sysdummy1”。我似乎无法让下划线在降价处工作,但希望这很清楚。

答案 3 :(得分:0)

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