我有一个简单的存储过程,它使用标识主键列插入表。我需要获取插入生成的密钥。我更喜欢使用标准JDBC getGeneratedKeys方法,但我不确定存储过程需要做什么/返回来构建该结果集。我的最终目标是从Hibernate做到这一点。我也尝试使用select identity generator,但它总是返回0。
答案 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程序。插入后选择不是一个好主意,因为其他进程可能已将新数据插入表中并导致数据完整性问题。