我有一个简单的存储过程,它可以插入带有标识主键列的表。我需要获取插入生成的密钥。我更喜欢使用标准的 JDBC getGeneratedKeys 方法,但我不确定存储过程需要做什么/返回来构建该结果集。我的最终目标是从 Hibernate 做到这一点。我也尝试使用选择标识生成器,但它总是返回 0。
Brian Deterling
问问题
3282 次
4 回答
1
也可以从插入中选择:
SELECT pkey FROM FINAL TABLE (INSERT INTO tab(a, b, c, d) VALUES ... )
于 2009-06-14T06:51:51.553 回答
0
在 DB2/400 上,它似乎是 IDENTITY_VAL_LOCAL() 函数,它返回最近分配给标识列的值。
http://publib.boulder.ibm.com/infocenter/db2luw/v8/topic/com.ibm.db2.udb.doc/admin/r0004231.htm
于 2009-03-22T09:16:13.993 回答
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 替换为“select identity val local() from sysibm.sysdummy1”。我似乎无法让下划线在降价中工作,但希望这很清楚。
于 2009-03-23T16:22:47.937 回答
0
存储过程可以使用 identity val local 来获取生成的值并将其作为输出参数传递给 Java 程序。插入后选择不是一个好主意,因为其他进程可能已将新数据插入到表中并会导致数据完整性问题。
于 2009-04-06T02:45:25.987 回答