Вам необходимо использовать скалярную функцию IDENTITY_VAL_LOCAL
. Из документации IBM :
IDENTITY_VAL_LOCAL
- это недетерминированная функция, которая возвращает последний назначенный значение для столбца идентификаторов.
Пример:
CREATE TABLE EMPLOYEE
(EMPNO INTEGER GENERATED ALWAYS AS IDENTITY,
NAME CHAR(30),
SALARY DECIMAL(5,2),
DEPT SMALLINT)
INSERT INTO EMPLOYEE
(NAME, SALARY, DEPTNO)
VALUES('Rupert', 989.99, 50)
SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1
Я не уверен в iSeries, но с db2v8.1 работало следующее:
Считайте, что «ID» - это имя столбца вашей идентификации. Следующий stmt вернет только что сгенерированный идентификатор (тот же, что вставлен с помощью insert stmt):
SELECT ID FROM FINAL TABLE (
INSERT INTO AwesomeTable (column1, column2, etc.)
VALUES (value1, value2, etc.)
)
Некоторое объяснение, которое я нашел на сайте publib: (я использовал его для справки, чтобы проверить свой запрос выше)
/* The following SELECT statement references an INSERT statement in its
FROM clause. It inserts an employee record from host variables into
table company_b. The current employee ID from the cursor is selected
into the host variable new_id. The keywords FROM FINAL TABLE
determine that the value in new_id is the value of ID after the
INSERT statement is complete.
Note that the ID column in table company_b is generated and without
the SELECT statement an additional query would have to be made in
order to retreive the employee's ID number.
*/
EXEC SQL SELECT ID INTO :new_id
FROM FINAL TABLE(INSERT INTO company_b
VALUES(default, :name, :department, :job, :years, :salary,
:benefits, :id));
Надеюсь, это поможет :)