Как я могу вернуть сгенерированные ключи в JDBC из хранимой процедуры DB2, которая выполняет вставку? - PullRequest
1 голос
/ 22 марта 2009

У меня есть простая хранимая процедура, которая выполняет вставку в таблицу со столбцом идентификатора первичного ключа. Мне нужно получить ключ, который был сгенерирован вставкой. Я бы предпочел использовать стандартный метод getGeneratedKeys JDBC, но я не уверен, что хранимая процедура должна делать / возвращать, чтобы построить этот набор результатов. Моя конечная цель - сделать это из Hibernate. Я также пытался использовать генератор идентификаторов выбора, но он всегда возвращает 0.

Ответы [ 4 ]

1 голос
/ 14 июня 2009

Также можно выбрать из вставки:

SELECT pkey FROM FINAL TABLE (INSERT INTO tab(a, b, c, d) VALUES ... )
0 голосов
/ 23 марта 2009

Я никогда не пробовал использовать функцию 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 () из sysibm.sysdummy1». Кажется, я не могу заставить подчеркивание работать в уценке, но, надеюсь, это понятно.

0 голосов
/ 06 апреля 2009

Хранимая процедура может использовать идентификатор val local для получения сгенерированного значения и передачи его в качестве выходного параметра в программу Java. Выбор после вставки не является хорошей идеей, поскольку другие процессы могли вставить новые данные в таблицу и вызвать проблемы с целостностью данных.

0 голосов
/ 22 марта 2009

В DB2 / 400 это, похоже, функция IDENTITY_VAL_LOCAL (), которая возвращает последнее назначенное значение для столбца идентификаторов.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...