1

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

4

4 回答 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 回答